unity是unity是微軟patterns& practices組用c#實現的輕量級,可擴充套件的依賴注入容器,它為方便開發者建立鬆散耦合的應用程式,
有以下優點:
1.簡化了物件的建立,特別是針對分層物件結構和依賴關係;
2.需求的抽象,允許開發人員在執行時或配置檔案中指定依賴關係,簡化橫切關注點的管理;
3.推遲為容器配置元件的時機,增加了靈活性;
4.服務定位能力,這使客戶能夠儲存或快取容器;
5.例項和型別攔截
目前最新的版本為 unity 3.0 for .net 3.5 preview
以下程式用的是2.1版本
下面開始unity之旅
(一) 我的第乙個unity demo
新建乙個控制台應用程式,引用microsoft.practices.unity.dll檔案;
新建乙個鳥類的介面,定義乙個鳥叫的方法;
/// /// 鳥類介面
///
public inte***ce ibird
對這個介面進行實現:
/// /// 燕子
///
public class swallow : ibird
}
在mian方法中通過unity實現ioc反轉控制;
static void main( string args )
執行結果:
這個小例項已經實現了簡單的ioc控制反轉.
當乙個介面有兩個實現怎麼辦呢?是不是在加乙個類似於下邊的**就行了呢? 下面試一下.
unitycontainer.registertype();我們在原有的程式中加乙個sparrow類,實現ibird介面:
public class sparrow : ibird
}
main方法**:
//例項化乙個控制器
iunitycontainer unitycontainer = new unitycontainer();
//實現注入
unitycontainer.registertype();
unitycontainer.registertype();
ibird bird = unitycontainer.resolve();
bird.say();
console.read();
執行一下,結果:
嗯?這是什麼情況,為什麼是麻雀在叫..而不是燕子叫呢? 原來
當乙個介面有多個實現,而且沒有用別名區分時,就會選擇最後乙個注入的實現;
下邊給每個注入都加上別名:
//例項化乙個控制器
iunitycontainer unitycontainer = new unitycontainer();
//實現注入,用別名區分實現
unitycontainer.registertype("swallow");
unitycontainer.registertype("sparrow");
ibird swallow = unitycontainer.resolve("swallow");
ibird sparrow = unitycontainer.resolve("sparrow");
swallow.say();
sparrow.say();
console.read();
執行結果:
這才是我們想要的結果,哈哈.....
當乙個介面有多個實現時,需要通過別名區分。
(二) unity的建構函式注入
新建 乙個ibirdhome 介面,並對介面進行實現:
/// /// 小鳥的家
///
public inte***ce ibirdhome
}/// /// 小鳥的家
///
public class birdhome : ibirdhome
public birdhome(ibird bird)
}
main方法如下:
//例項化乙個控制器
iunitycontainer unitycontainer = new unitycontainer();
//實現注入
unitycontainer.registertype();
unitycontainer.registertype();
ibirdhome birdhome = unitycontainer.resolve();
birdhome.swallow.say();
console.read();
執行結果:
我們只是通過unity得到了乙個ibirdhome實現,但並沒有對 ibird swallow 進行例項化,但結果已經執行出來,並沒有報錯.
原來這些工作unity已幫我們做了,我們可以偷個懶了.嘿嘿.......
(三)屬性注入
把birdhome類的中建構函式去掉,在屬性上加上[dependency]特性
/// /// 小鳥的家
///
public class birdhome : ibirdhome
}
執行結果與上結果一樣,親,不信,試試!
(四) 初使化器注入(自已起的名字)
初使化器注入與建構函式注入相似,但不用寫到建構函式裡邊,而是在初使化方法上加上[injectionmethod]特性
/// /// 初始化器注入
///
///
[injectionmethod]
public void initialize(ibird bird)
執行結果依然是:
生命不息,程式設計不止!
map容器簡單應用
需要按照編號將一組資料排序顯示,我一下子就想到了容器。以前曾經用過map,所以還是用map來實現吧。之前,完整地看完了 c 標準程式庫 並且也讀過侯捷老師的 stl原始碼剖析 對容器的特性和使用有了一點印象 我沒有經常應用,不敢說非常熟悉 網上有勤奮好學的前輩們總結的好文章 這兒 有一篇,是關於ma...
STL順序容器簡單應用
include include includeusing namespace std void main01 演算法和迭代器能無縫連線 int num1 count v1.begin v1.end 3 cout num1 endl 容器裝元素 class teacher void main02 容器...
CSS 容器和選擇器的簡單應用
選擇器 權重行內樣式 1000 id 100 class.10標籤1 通用 0 基本了解 容器標籤不具備任何特殊特殊作用,僅當作容器來使用 先介紹我學習到的兩個最基礎的容器 實踐 利用容器來達到如下的效果 居中標題 span p div body 在 head 標籤中使用 style 標籤,將所有標...