【发布时间】:2013-10-27 12:39:44
【问题描述】:
我使用 DI 编写了一个大型应用程序。该应用程序由初始化时的引导程序组成,其中注入了大多数依赖项。一切都很好。
但是,有些服务* 我不能简单地到处注入。 一个很好的例子是日志服务。它是一个日志,因此,解决方案中的每个类都可能希望将其用于调试或跟踪目的。并非每个类都是在初始化时创建的,有些是由第三方提供的(应用程序在某种程度上是一个框架)。现在,我的解决方案是使用单例;我什至为单例创建了一些包装类,所以我可以在可能的地方注入它。
我想知道是否有更好的方法是在这些地方使用 ServiceLocator。 这将完全消除单例导致的硬耦合。类将与定位器耦合,是的,但我可以为它们提供任何实现。
*在 DDD 术语中。
P.S.:我在这里使用 .NET,但我不会这样标记它;我相信这个问题适用于任何接受 DI 的语言。
【问题讨论】:
-
这两个选项都不好。日志是一个跨领域的问题,所以最好作为装饰者处理:stackoverflow.com/a/7906547/126014
标签: dependency-injection singleton service-locator