我使用 DI 编写了一个大型应用程序。该应用程序由初始化时的引导程序组成,其中注入了大多数依赖项。一切皆好。
但是,有些服务* 我不能简单地到处注入。一个很好的例子是日志服务。它是一个日志,因此,解决方案中的每个类都可能希望将其用于调试或跟踪目的。并非每个类都是在初始化时创建的,有些是由第三方提供的(应用程序在某种程度上是一个框架)。现在,我的解决方案是使用单例;我什至为单例创建了一些包装类,所以我可以在可能的地方注入它。
我想知道是否有更好的方法是在这些地方使用 ServiceLocator。这将完全消除单例引起的硬耦合。类将与定位器耦合,是的,但我可以为它们提供任何实现。
*在 DDD 术语中。
PS:我在这里使用.NET,但我不会这样标记它;我相信这个问题适用于任何接受 DI 的语言。