gpt4 book ai didi

dependency-injection - 使用依赖注入(inject)时用 ServiceLocators 替换单例

转载 作者:行者123 更新时间:2023-12-04 08:23:41 25 4
gpt4 key购买 nike

我使用 DI 编写了一个大型应用程序。该应用程序由初始化时的 Bootstrap 组成,其中注入(inject)了大多数依赖项。一切皆好。

但是,有些服务* 我不能简单地到处注入(inject)。 一个很好的例子是日志服务。它是一个日志,因此,解决方案中的每个类都可能希望将其用于调试或跟踪目的。并非每个类都是在初始化时创建的,有些是由第三方提供的(应用程序在某种程度上是一个框架)。现在,我的解决方案是使用单例;我什至为单例创建了一些包装类,所以我可以在可能的地方注入(inject)它。

我想知道是否有更好的方法是在这些地方使用 ServiceLocator。 这将完全消除单例引起的硬耦合。类将与定位器耦合,是的,但我可以为它们提供任何实现。

*在 DDD 术语中。

P.S.:我在这里使用 .NET,但我不会这样标记它;我相信这个问题适用于任何接受 DI 的语言。

最佳答案

在 Java EE 6/7 环境中,横切方面的最佳选择是使用拦截器。横切功能可以很容易地分解为可重复使用的拦截器。我不知道.NET 中是否有类似的东西。

另一方面,设计模式服务定位器在某种程度上已被 CDI 取代。该模式将应用程序代码与服务实现的细节隔离开来。 CDI 可以提供与服务细节相同级别的隔离,但方式更简单。

万一您需要在应用程序的生命周期内维护 bean 的状态,您应该使用 @Singleton .

以上适用于 Java EE 6/7 环境。

关于dependency-injection - 使用依赖注入(inject)时用 ServiceLocators 替换单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19453564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com