c# - 第一次使用 IoC 因为我碰壁了,请解释一下 'behind the scenes'

标签 c# ioc-container ninject

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

因此,我遇到了必须将太多工厂/管理器传递到我的类构造函数中的问题,这导致我陷入依赖注入(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 容器都支持自动接线,其工作方式如下:

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

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

关于c# - 第一次使用 IoC 因为我碰壁了,请解释一下 'behind the scenes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939948/

相关文章:

javascript - 使用依赖注入(inject)的 TypeScript 应用程序初始化

c# - 如何访问 VSTO Words 加载项中的 KeyUp、KeyDown 事件?

c# - 带有自定义轴标签的 xaml c# 图表

c# - 使用多个构造函数注册开放泛型的简单注入(inject)器

.net - 将 InterceptionBehaviour 添加到 IoC 容器中注册的所有内容

asp.net - Web场景下StackExchange.Redis ConnectionMultiplexer生命周期管理

c# - 如何在 VS2013 中启用输出窗口?

c# - 在特定点将字符串值添加到对象列表

c# - 如何解决错误 :the type does not appear to implement microsoft. practices.servicelocation.iservicelocator?

Ninject.MVC3 NinjectWebCommon.cs 的无效路径