好的。我終於理解了DI甚至IoC,容器等所有複雜的概念。但是我仍然錯過了一些東西。關於SOLID原則,使用容器和Unity的DI:如何管理容器中的DI映射?
假設我有一個名爲SomeClass
的類,它將在構造函數中instaciate其中一個實現IFirstLevelOfAbstraction
的類。執行IFirstLevelOfAbstraction
的類是SubClass1
和SubClass2
。我提到的那些類是instanciate實現ISecondLevelOfAbstraction
的類,它們是SubClass3
和SubClass4
。
TL; DR這裏是圖像。
在我的入口點使用統一這應該是這個樣子:
IUnityContainer container = new UnityContainer();
container.RegisterType<SomeClass>();
container.RegisterType<IFirstLevelOfAbstraction, SubClass1>();
container.RegisterType<IFirstLevelOfAbstraction, SubClass2>();
container.RegisterType<ISecondLevelOfAbstraction, SubClass3>();
container.RegisterType<ISecondLevelOfAbstraction, SubClass4>();
var someClass= container.Resolve<SomeClass>();
問題是:如何選擇哪條路徑將DI必須在容器?
即IFirstLevelOfAbstraction
的實例是SubClass1
和ISecondLevelOfAbstraction
是SubClass4
。
稍後如何輕鬆更改此設置?
嵌套這麼多的DI不是反模式嗎?爲什麼?這爲什麼這麼好?
我覺得沒有人使用這個。在C#中它甚至不是本地的。
是否'Class1'採取'IFirstLevelOfAbstraction'作爲構造函數的參數? –
@YacoubMassad是的,它的確如此。 – Aoren
扔掉你的DI容器,並採用[Pure DI](http://blog.ploeh.dk/2014/06/10/pure-di)代替;那麼您將自動能夠以您想要的方式完全配置您的依賴關係圖,而無需再學習其他類庫API。 –