绑定 Ninject Kernel ToConstant 并使用 InTransientScope 有什么意义?
What is the point to bind Ninject Kernel ToConstant and use InTransientScope?
我想将 IServiceProvider 绑定到 Ninject IKernel 实现。使用有什么意义
Bind<IKernel>().ToConstant(this).InTransientScope();
来自 Ninject sources 的绑定?
这就是 Ninject 将 IKernel 绑定到 KernelBase 实现的方式。我不明白这一点。 ToConstant 绑定类型将范围隐式设置为 Singleton。具有 ToConstant 绑定类型的 TransientScope 对我来说没有任何意义。
ToConstant
有两个主要影响:
- ninject 在内核的整个生命周期中保持对 "constant" 的强引用
- 作用域配置为单例作用域。
现在 ToConstant
之后对 .InTransientScope()
的调用将范围从 Singleton 改回 transient。
这有什么变化? "transient" 对象不会被 ninject 处理。对于 Singleton
个对象,如果它们是一次性的,ninject 将在内核被销毁时销毁它们。它不会为 "transient" 个对象这样做。
因此,如果内核将被绑定 .InSingletonScope()
,执行 kernel.Dispose()
将导致对 kernel.Dispose()
的另一个调用 - 甚至可能是堆栈溢出。
我想将 IServiceProvider 绑定到 Ninject IKernel 实现。使用有什么意义
Bind<IKernel>().ToConstant(this).InTransientScope();
来自 Ninject sources 的绑定?
这就是 Ninject 将 IKernel 绑定到 KernelBase 实现的方式。我不明白这一点。 ToConstant 绑定类型将范围隐式设置为 Singleton。具有 ToConstant 绑定类型的 TransientScope 对我来说没有任何意义。
ToConstant
有两个主要影响:
- ninject 在内核的整个生命周期中保持对 "constant" 的强引用
- 作用域配置为单例作用域。
现在 ToConstant
之后对 .InTransientScope()
的调用将范围从 Singleton 改回 transient。
这有什么变化? "transient" 对象不会被 ninject 处理。对于 Singleton
个对象,如果它们是一次性的,ninject 将在内核被销毁时销毁它们。它不会为 "transient" 个对象这样做。
因此,如果内核将被绑定 .InSingletonScope()
,执行 kernel.Dispose()
将导致对 kernel.Dispose()
的另一个调用 - 甚至可能是堆栈溢出。