我在研究類之間的高耦合,特別是IoC。 我想問一些問題:關於IoC的問題
- 我正在使用Ninject;哪一層我應該把dll Ninject
- 當我創建一個設置發送到客戶端時,dll Ninject也會去找客戶嗎?
- 我一直在研究互聯網,得出如下結論: a。控制反轉是當我改變我的類,並且我沒有在他們自己的類中實例化它們,而是作爲參數或使用Ninject b。依賴注入是當我添加到我的項目接口而不是具體的類。
我在研究類之間的高耦合,特別是IoC。 我想問一些問題:關於IoC的問題
Ad2。您必須將ninject dll添加到您的設置中。
Ad3。控制反轉(IoC)與接口和類無關。您可以使用高度耦合的代碼來控制反轉。
class GodClass
{
void DoSth(int param)
{
switch (param)
{
case 0: Console.WriteLine("param is 0"); break;
case 1: Console.WriteLine("param is 1"); break;
}
}
}
,並與國際奧委會它可能看起來像:
class GoodClass
{
Dictionary<int, BaseClass> _consoleWriters;
public GoodClass(IEnumerable<BaseClass> writers)
{
foreach (var writer in writers)
_consoleWriters.Add(writer.ParamSupported, writer);
}
void DoSth(int param)
{
_consoleWriters[ param ].DoSth();
}
}
abstract class BaseClass
{
abstract int ParamSupported {get;}
abstract void DoSth(int param);
}
class ZeroWriter : BaseClass
{
override int ParamSupported {get{return 0;}}
override DoSth(int param) { Console.WriteLine("param is 0"); }
}
class OneWriter : BaseClass
{
override int ParamSupported {get{return 1;}}
override DoSth(int param) { Console.WriteLine("param is 1"); }
}
廣告1。我將在Main函數中添加IoC框架配置/初始化,並將引用初始化容器傳遞給其餘代碼。
IoC的概念與建築圖層的概念是正交的。每當您使用Ninject功能(例如[Inject]
屬性(通常在注入類的級別)或(b)無論您設置內核和模塊(通常在客戶端級別))時,您都必須參考Ninject(a)。
是的。 Ninject將成爲運行時的依賴。
國際奧委會可能會出現這些行爲,但其核心概念可能會被更好地理解爲Holywood principle:不要打電話給我們,我們會打電話給你。這意味着,不要打擾建立你的依賴關係,因爲它們將爲你提供。儘管Ninject等工具可以極大地緩解您的生活,但您可以通過多種方式達到此目的,即使是「手動」。無論如何,通過參數接收依賴對象(主要是在對象構造期間)是一種非常常見的模式,因爲它通過接口而不是類來定義依賴關係。
使用接口可以幫助你從實現建立合同,以更好地分開的要求(這是擺在首位應用的IoC驅動的原因)。另外,它可以幫助你編寫測試和模擬。但那是另一個可能性的世界。玩的開心!我已經使用Ninject將近一年了,而且我發現它非常易於使用和維護。
關於依賴注入......根據您所說的語言,這可能不是真的。在C#/ VB.NET的情況下,是的。在JavaScript,Ruby等動態語言中並非如此。我想現在,如果你使用的是DynamicObject,它也可能是錯誤的。通過指定你的類依賴於一個接口而不是一個具體的類,你可以手動地或通過使用像Ninject這樣的IoC容器輕鬆地注入該接口的不同實現。
On Inversion of Control ...它基本上是說不是調用類/方法創建其他組件需要執行其工作,而是讓它在別處創建並傳遞給您的類/方法。打破這個具體的依賴關係鏈將使你的代碼更加鬆散耦合,並允許你用一個實現了相同接口/契約的不同組件來替換所需組件的一個實現。
上依賴倒置原則/ IOC一個很好的解釋,可http://www.objectmentor.com/resources/articles/dip.pdf找到。
這個主題其他好的資源:
謝謝! 我會繼續學習。 – ridermansb 2011-02-18 18:27:46