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

Vla*_*nko 3 c# kernel ninject

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

Bind<IKernel>().ToConstant(this).InTransientScope();
Run Code Online (Sandbox Code Playgroud)

从Ninject 来源绑定?

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

Bat*_*nit 6

ToConstant 有两个主要影响:

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

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

这有什么变化?ninject不会处理"瞬态"对象.对于Singleton对象,如果它们是一次性的,ninject将在处理内核时处置它们.对于"瞬态"物体而言,它并没有这样做.

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