你应该如此设置一切 所有课程都有一个地方 总是有一个依赖链 最深的课程? (如果我/那个 感觉到了)
是的,这叫做 的 组成根 强> 您的应用程序,它是您配置IoC容器和解析根类型的地方。
拥有所有代码是不对的 充斥着对IoC的依赖 容器的选择,是吗?
正确的是,最好不要在类型周围传递对IoC容器的引用,因为这会使它们不再可重用,并且通常会将类型与IoC容器的概念结合起来。
那么你在哪里“使用”你的 容器(用于重新解决)?怎么做 你可以解决所有问题 你的代码深入了吗?是它的一部分吗? 以正确的方式设计一切 通过使用每个接口 一层直到前层?
您可以在组合根目录中使用容器,并在代码中的任何位置使用容器(通常用于依赖链支持)来实例化类型(即来自工厂类型)。
许多IoC容器可以为您生成这些工厂类型,因此您只需要通过,例如 IMyFactory 作为依赖,或在某些IoC容器的情况下,a Func<IMyService> 。这意味着您不需要创建依赖于IoC容器的工厂类型。
IMyFactory
Func<IMyService>
在使用接口方面,依赖性倒置原则声明您应该依赖于抽象,而不是依赖于具体结果,因此如果您希望采用依赖注入,则需要考虑此概念。