将依赖项注入单例类的一种体面方法是什么?

| 我有一个依赖于另一个类的单例,因此我想注入此依赖关系以使其可单元测试。由于无法在单例上使用构造函数注入,所以我猜我应该改用setter注入,但是我真的不喜欢它,因为在某些时候,某个人(可能是我自己)会忘记调用setter。您当然可以将依赖对象注入到singleton的getInstance方法中,但这也很丑陋。有解决此问题的更好方法(不使用IoC容器之类的工具)吗?
public class Singleton {
    private ISomeDependency _dependency;
    private static final Singleton INSTANCE = new Singleton();
    private Singleton() {
    }
    public static Singleton getInstance() {
       return INSTANCE;
    }
    ...
}
    
已邀请:
单例设计模式是一个很大的反模式,因为无法将依赖项注入单例中。但是,这并不意味着在应用程序的生存期内无法拥有单个实例,但是您不应为此使用单例设计模式。尤其是在使用依赖项注入时,没有理由使用此设计模式。 只需在依赖于该类型的类型中注入该类型的实例作为构造函数,就可以完成。这使您可以在应用程序的顶部构建对象图,并在其中控制生活方式,并将依赖项注入该实例中。 该类的设计应与其他任何类一样:
public class SomeService : ISomeService 
{
    private ISomeDependency _dependency;

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

    // ISomeService members here
}
依赖项注入框架将使您可以非常轻松地定义任何类型的生活方式。对于简单的应用程序,您仍然可以手动执行此操作。     
您可以使用依赖项注入容器(如Spring.Net,MS Unity等)来获取依赖项的具体类型。
public class Singleton {
private ISomeDependency _dependency = Container.Resolve<ISomeDependency>();
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
   return INSTANCE;
}
...
}
现在,您可以在单例之外进行控制。     

要回复问题请先登录注册