对象在通过ToConstant解析时被处置,而在通过tommethod解析时不被处置

本文关键字:tommethod ToConstant 对象 | 更新日期: 2023-09-27 18:01:31

假设我有一个名为_kernel的Ninject内核,一个给定的对象(作为参数接收),例如myClass,类型为IMyClass:IDisposable;我注意到,当我通过tommethod将IMyClass绑定到myClass时,如下所示:

Bind<IMyClass>().ToMethod(x => myClass);

那么,无论何时我释放_kernel, myClass.Dispose()都不会被调用。

但是,如果我通过ToConstant将IMyClass绑定到myClass,就像这样:
Bind<IMyClass>().ToConstant(myClass);

则在处理_kernel时将调用myClass.Dispose()

你们能解释一下这种行为吗?

对象在通过ToConstant解析时被处置,而在通过tommethod解析时不被处置

ToConstant的标准范围为单例范围,ToMethod的标准范围为暂态范围。瞬态作用域对象的生存期不是由Ninject管理的,因此实例不是Dispose d。