想象一下,我有以下构造函数注入Ninject:
服务(A) - >支持(B) - >存储库(C)
A =瞬态范围 B =单身范围 C = InRequest范围
http请求结束后会发生什么? Ninject是否处理C因此在B中有一个悬空的C实例作为成员?
答案 0 :(得分:1)
根据C
一次性实例在请求处理结束时处理。
关键词是Disposable。
如果您的Singleton维护对注入的C
依赖项的强引用,那么它将无法在Http请求结束时进行垃圾收集,并且可以通过扩展将其视为单例本身,即使Ninject仍会尝试在Http请求结束时处理该实例,正如Eric在评论中提到的那样,可能会使对象处于不可靠的状态。
这可能是一种设计气味,要么从Singleton中突破git read-tree
依赖关系,要么完全合并它以使其行为不会出乎意料。