Ninject 混合范围

Ninject mixed scopes

假设我有以下构造函数注入 Ninject:

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

A = 瞬态作用域 B = 单例作用域 C = InRequest 范围

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

根据 Ninject documentation 对于 .InRequestScope()

Disposable instances are Disposed at end of request processing.

关键字是一次性的。

如果您的单例维护对注入的 C 依赖项的强引用,则它不符合在 Http 请求结束时被垃圾收集的条件,并且将被扩展为单例本身,即使 Ninject 仍会尝试在 Http 请求结束时处理实例,正如 Eric 在评论中提到的那样,这可能会使对象处于不可靠状态。

这可能是一种设计味道,从单例中打破 C 依赖性,或者完全合并它,这样它的行为就不会意外。