绑定Ninject内核ToConstant并使用InTransientScope有什么意义?

时间:2015-01-16 12:43:53

标签: c# kernel ninject

我想将IServiceProvider绑定到Ninject IKernel实现。有什么意义?

Bind<IKernel>().ToConstant(this).InTransientScope();
来自Ninject sources

绑定?

这是Ninject如何将IKernel绑定到KernelBase实现的方式。我无法理解这一点。 ToConstant绑定类型设置范围隐式为Singleton。而带有ToConstant绑定类型的TransientScope对我没有任何意义。

1 个答案:

答案 0 :(得分:6)

ToConstant有两个主要影响:

  • ninject在内核的整个生命周期内保持对“常量”的强引用
  • 范围配置为Singleton范围。

现在.InTransientScope()之后调用ToConstant会将范围从Singleton更改为瞬态。

这有什么变化? ninject不会处理“瞬态”对象。对于Singleton个对象,如果它们是一次性的,ninject将在处理内核时处置它们。它并没有为“瞬态”物体做到这一点。

因此,如果内核被绑定.InSingletonScope(),那么执行kernel.Dispose()会导致另一次调用kernel.Dispose() - 甚至可能是Stack Overflow。