我理解以下Ninject注册:
kernel.Bind<ISomeType>().To<SomeTypeImplementation>();
告诉Ninect使用 SomeTypeImplementation 来完成对 ISomeType 的请求。
但是我不确定以下是什么有用。
kernel.Bind<ApplicationDbContext>().ToSelf();
有人建议我使用这个问题: What ninject binding should I use?
答案 0 :(得分:3)
它使ApplicationDbContext“可自我绑定”。如果您没有要绑定的接口,则可以绑定到类本身。如果您为调用添加范围,例如:
,则更有用kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
只要它看到需要注入的ApplicationDbContext,它就会重用同一个对象,只要它在同一个HTTP请求中即可。
默认范围是瞬态的,这意味着每当一个类请求ApplicationDbContext时,它都会创建一个新的实例。如果您有两个需要在同一事务中使用上下文的类,则可能会出现问题。这就是为什么你经常会看到它用InRequestScope()完成的。
答案 1 :(得分:3)
通过自我绑定类型,您可以为以下类型启用该类型:
容器的生命周期管理。
使容器能够将依赖项注入依赖于自绑定类型的其他类型,并同样将此类型的依赖项注入其实例。
如果您只有一个实现,或者由于某种原因不需要使用抽象,那么非常有用。