我对完全理解DI有问题。假设
我有一个深度嵌套的应用程序(10层)
每个层都是针对接口设计的。 例如:class Layer3:InterfaceLayer3 {…。}
每层都依赖于通过构造函数注入注入的下一层。 例如:Layer3(InterfaceLayer4 instanceLayer4){…。}
每个层都有自己的程序集。所有接口都以各自的程序集(* .dll)分隔。
如果我查看应用程序的类图,它看起来很棒:最小的依赖!!!
但是,我必须在某个地方创建要注入的对象。我是通过组合根目录的工厂来实现的,接近“ void main(void)”。这些工厂位于“ Factories.dll”中。
如果再次查看类图,会发现我的“ Factories.dll”创建了一个依赖关系地狱:它取决于所有层。
我的问题: 看来DI解决了我的应用程序代码的依赖性问题,但我现在将问题转移到了另一个地方:“ Factories.dll”。这个说法有什么问题?
答案 0 :(得分:1)
您不必担心Composition Root(应用程序入口点)引用了许多“应用程序代码”项(接口和实现程序集),因为它已经实现了主要目标-库/框架取决于只是需要抽象。
因此,可以轻松地配置,测试,重用,维护,打包打包交付库/框架
如果您担心“合成根”中配置的混乱/复杂性,则可以使用与以下内容相关的 Module (由许多IoC容器提供,例如Autofac Module)配置项。