gpt4 book ai didi

design-patterns - 将依赖项注入(inject)单例类的一种不错的方法是什么?

转载 作者:行者123 更新时间:2023-12-04 20:54:27 24 4
gpt4 key购买 nike

我有一个依赖于另一个类的单例,所以我想注入(inject)这个依赖项以使其可单元测试。由于无法在单例上使用构造函数注入(inject),我想我应该改用 setter 注入(inject),但我真的不喜欢它,因为在某些时候有人(可能是我自己)会忘记调用 setter。您当然可以将依赖对象注入(inject)到单例的 getInstance 方法中,但这也很丑陋。有没有更好的方法来解决这个问题(不使用 IoC 容器等工具)?

public class Singleton {
private ISomeDependency _dependency;
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
...
}

最佳答案

单例设计模式是一个很大的反模式,因为没有办法在单例中注入(inject)依赖项。然而,这并不意味着在应用程序的生命周期内无法拥有单个实例,但您不应该为此使用单例设计模式。尤其是在使用依赖注入(inject)时,没有理由使用这种设计模式。

只需将该类型的实例作为构造函数注入(inject)依赖它的类型中,就完成了。这使您可以在应用程序顶部构建对象图并控制那里的生活方式并将依赖项注入(inject)该实例。

该类的设计应该与任何其他类一样:

public class SomeService : ISomeService 
{
private ISomeDependency _dependency;

public ISomeService(ISomeDependency dependency)
{
_dependency = dependency;
}

// ISomeService members here
}

依赖注入(inject)框架将允许您非常轻松地定义任何类型的生活方式。但是,对于简单的应用程序,您仍然可以手动执行此操作。

关于design-patterns - 将依赖项注入(inject)单例类的一种不错的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135212/

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