kernel.Bind <sometype>()。ToSelf()做什么?</sometype>

时间:2014-02-27 19:03:20

标签: inversion-of-control ninject

我理解以下Ninject注册:

kernel.Bind<ISomeType>().To<SomeTypeImplementation>();

告诉Ninect使用 SomeTypeImplementation 来完成对 ISomeType 的请求。

但是我不确定以下是什么有用。

kernel.Bind<ApplicationDbContext>().ToSelf();

有人建议我使用这个问题: What ninject binding should I use?

2 个答案:

答案 0 :(得分:3)

它使ApplicationDbContext“可自我绑定”。如果您没有要绑定的接口,则可以绑定到类本身。如果您为调用添加范围,例如:

,则更有用
kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();

只要它看到需要注入的ApplicationDbContext,它就会重用同一个对象,只要它在同一个HTTP请求中即可。

默认范围是瞬态的,这意味着每当一个类请求ApplicationDbContext时,它都会创建一个新的实例。如果您有两个需要在同一事务中使用上下文的类,则可能会出现问题。这就是为什么你经常会看到它用InRequestScope()完成的。

答案 1 :(得分:3)

通过自我绑定类型,您可以为以下类型启用该类型:

  1. 容器的生命周期管理。

  2. 使容器能够将依赖项注入依赖于自绑定类型的其他类型,并同样将此类型的依赖项注入其实例。

  3. 如果您只有一个实现,或者由于某种原因不需要使用抽象,那么非常有用。