所以我开始了这个新项目,我试图整合我正在阅读的所有新设计原则,即尝试使事物松散耦合、可测试并遵循一些模式。
因此,我遇到了必须将太多工厂/管理器传递到我的类构造函数中的问题,这导致我陷入依赖注入(inject)。
public class SomeClass
{
public SomeClass(IDBFactory factory, IOrderManager orderManager, ....)
}
因此,如果我使用 ninject,根据我的理解,我会将特定的实现绑定(bind)到该类。
那么幕后发生了什么?
每当我实例化 SomeClass 时,NInject 都会绑定(bind)我在配置文件中定义的实现吗?
即
我愿意:
ISomeClass sc = NInject.Get<ISomeClass>();
ninject 就可以了:
new SomeClassImpl(pass in all the implementaitons in the constructor)
正确吗?
最佳答案
我不知道 NInject,但大多数 DI 容器都支持自动接线,其工作方式如下:
- 当您请求 ISomeClass 时,它会查看所有已注册类型的列表。使用此列表,它发现所需的 ISomClass 实现是 SomeClass。
- 它将使用 SomeClass 的构造函数来创建实例(可能使用 Activator.CreateInstance),因此它使用 Reflection 来确定需要哪些参数。
- 对于每个参数,它都会查看类型并为每个参数重复步骤 1-2。
因此,该过程可能是递归的,但最终,您应该得到一个完全填充的对象图,其中所有依赖项都得到满足。
关于c# - 第一次使用 IoC 因为我碰壁了,请解释一下 'behind the scenes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939948/