我想将IServiceProvider绑定到Ninject IKernel实现。有什么意义?
Bind<IKernel>().ToConstant(this).InTransientScope();
来自Ninject sources的绑定?
这是Ninject如何将IKernel绑定到KernelBase实现的方式。我无法理解这一点。 ToConstant绑定类型设置范围隐式为Singleton。而带有ToConstant绑定类型的TransientScope对我没有任何意义。
答案 0 :(得分:6)
ToConstant
有两个主要影响:
现在.InTransientScope()
之后调用ToConstant
会将范围从Singleton更改为瞬态。
这有什么变化? ninject不会处理“瞬态”对象。对于Singleton
个对象,如果它们是一次性的,ninject将在处理内核时处置它们。它并没有为“瞬态”物体做到这一点。
因此,如果内核被绑定.InSingletonScope()
,那么执行kernel.Dispose()
会导致另一次调用kernel.Dispose()
- 甚至可能是Stack Overflow。