Ninject混合范围

时间:2015-05-12 19:49:29

标签: c# asp.net-mvc dependency-injection ninject

想象一下,我有以下构造函数注入Ninject:

服务(A) - >支持(B) - >存储库(C)

A =瞬态范围 B =单身范围 C = InRequest范围

http请求结束后会发生什么? Ninject是否处理C因此在B中有一个悬空的C实例作为成员?

1 个答案:

答案 0 :(得分:1)

根据C

的Ninject documentation
  

一次性实例在请求处理结束时处理。

关键词是Disposable。

如果您的Singleton维护对注入的C依赖项的强引用,那么它将无法在Http请求结束时进行垃圾收集,并且可以通过扩展将其视为单例本身,即使Ninject仍会尝试在Http请求结束时处理该实例,正如Eric在评论中提到的那样,可能会使对象处于不可靠的状态。

这可能是一种设计气味,要么从Singleton中突破git read-tree依赖关系,要么完全合并它以使其行为不会出乎意料。