Unity這個微軟自家出的依賴注入,相信很多人都應該聽過了,不過貌似現在很少中文的教程,唉,本人E文不好。。只學到點皮毛。
而公司的網站也是採用Unity來做依賴注入的,在這裡就分享一個小Demo出來,希望大家能對Unity有個瞭解。雖然Spring.Net的也挺好用的,
不過本人有嚴重的微軟癖,所以還是用微軟的。
1.首先當然是先下載Unity,找不到的可以上google搜尋。
2.為Web項目添加Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll兩個引用。
3.在web.config檔案中的configSections中添加如下節點
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
4.在web.config檔案中的configuration中添加如下節點
<!--具體的Untiy配置項-->
<unity>
<containers>
<container name="Service">
<types>
<type type="TestUnity.ITest,TestUnity" mapTo="TestUnity.Test,TestUnity"/>
</types>
</container>
<container name="Repository">
<types>
<type type="TestUnity.IRepo,TestUnity" mapTo="TestUnity.Repo,TestUnity"/>
</types>
</container>
</containers>
</unity>
<!--結束untiy-->
container中的name是隨便起,type中的type是對應的介面,要把命名空間也加上去,mapTo是介面對應的實作類別
之後添加一個類UnityContext,如下:
public class UnityContext
{
public static UnityContext _instance;
private UnityContainer _container;
public static UnityContext Instance
{
get
{
if (_instance == null) _instance = new UnityContext();
return _instance;
}
}
/// <summary>
/// 建構函式
/// </summary>
public UnityContext()
{
_container = new UnityContainer();
UnityConfigurationSection setion = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
setion.Containers["Service"].Configure(_container);
setion.Containers["Repository"].Configure(_container);
}
public T Load<T>()
{
return _container.Resolve<T>();
}
}
這是一個簡單的單例模式的管理Unity的類。。。寫得有點爛。。。其中"Service"和"Repository"就是對應設定檔中的container的name屬性。
public T Load<T>()方法是返回指定類型介面的實現對象。
調用的話,如下:
ITest test = UnityContext.Instance.Load<ITest>();
IRepo repo = UnityContext.Instance.Load<IRepo>();
string hell = test.SayHello();
string hi = repo.SayHi();
其中ITest,Test,IRepo,Repo為介面與對應的實作類別,都是只有簡單返回一個"Hello"或者"Hi"的方法。只是為了測試。
這樣的話,基本上就完成了。。至於好處嘛,其實我不太清楚,可能是降低耦合吧。。還有很多不懂的地方。寫得很爛,只是希望有個啟發各位的效果。有什麼不足和不對的地方希望各位多多指教。
下面是我用的:
1.Asp.net MVC架構
2.LinQ to SQL架構
3.Unity1.1