2

所以我开始了这个新项目,我试图整合我所读到的所有新设计原则,即试图使事物松散耦合、可测试并遵循一些模式。

因此,我遇到了必须将太多工厂/管理器传递给我的类构造函数的问题,这导致我进入了依赖注入。

public class SomeClass
{
   public SomeClass(IDBFactory factory, IOrderManager orderManager, ....)
}

因此,如果我使用 ninject,据我所知,我会将特定的实现绑定到该类。

那么幕后发生了什么?

NInject 会,每当我实例化 SomeClass 时,它会绑定我在配置文件中定义的实现?

IE

我愿意:

ISomeClass sc = NInject.Get<ISomeClass>();

ninject 会做:

new SomeClassImpl(pass in all the implementaitons in the constructor)

正确的?

4

1 回答 1

4

我不知道 NInject,但大多数 DI 容器都支持Auto-Wiring,它的工作方式如下:

  1. 当您请求 ISomeClass 时,它会查看所有已注册类型的列表。使用此列表,它发现所需的 ISomClass 实现是 SomeClass。
  2. 它将使用 SomeClass 的构造函数来创建一个实例(可能使用 Activator.CreateInstance),因此它使用反射来确定需要哪些参数。
  3. 对于每个参数,它会查看类型并为每个参数重复步骤 1-2。

因此,该过程可能是递归的,但最终,您应该得到一个完全填充的对象图,其中所有依赖关系都得到满足。

于 2009-12-21T13:06:20.490 回答