我目前在权衡使用 DI 和 SL 的优缺点。然而,我发现自己陷入了以下两难困境:我应该仅将 IoC 容器注入到每个类中,然后对所有内容使用 SL。
DI 两难困境:
有些依赖项,例如 Log4Net 对于 DI 来说并不适用。我称这些为元依赖项,并认为它们对调用代码应该是不透明的。我的理由是,如果一个简单的类 'D' 最初没有实现日志记录,然后增长到需要日志记录,则依赖的类 'A'、'B'和'C' 必须从 'A' 传递它下来到 'D' (假设 'A' 包含 'B','B' 包含 'C',以此类推)。我们现在已经因为一个类需要记录日志而做出了重大的代码更改。
因此,我们需要一种获取元依赖项的不透明机制。两种方法浮现出来:单例和 SL。前者有已知的限制,主要是与刚性作用域相关:最好的单例将使用存储在应用程序范围(即静态变量中)的抽象工厂。这样可以提供一定的灵活性,但不完美。
一个更好的解决方案是将 IoC 容器注入到这些类中,然后从该类中使用 SL 从容器中解析这些元依赖项。
因此两难困境:由于现在正在向类中注入 IoC 容器,那么为什么不使用它来解析所有其他依赖项呢?
非常感谢您的想法 :)