将依赖注入与单例设计模式混合

Azz*_*rel 7 c# singleton dependency-injection

我的项目中有一个单例,如下所示:

//Create a Singleton
static MySingleton Instance;
private static readonly object Padlock = new object();
/// <summary>
/// Singelton Method, to make sure only one instance of this class exists at runtime.
/// </summary>
/// <returns></returns>
public static MySingleton GetInstance()
{
  //Thread Safety
  lock (Padlock)
  {
    if (Instance == null)
    {
      Instance = new MySingleton();
    }
    return Instance;
  }
}

private MySingleton()
{
}

//[...]
Run Code Online (Sandbox Code Playgroud)

Singleton 包含几个其他类作为 Properties,它们永远不应该为 null。

通常我会使用DependencyInjection来保证每个新对象在实例化时获得所有必要的参数。像这样:

IHelperClass Helper {get; set;}

IExectiveClass Executive {get; set;}

public NotMySingleton(IHelperclass helper, IExecutiveClass executive)
{
    Helper = helper;
    Executive = executive;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将DependencyInjectionSingleton Pattern结合起来。

有没有办法将单例与 DependenyInjection 一起使用? 什么是常见做法? 我有什么选择 (如果这不是合适的选择)

Mic*_*haC 5

所有 DI 框架都提供了一种方法来定义 DI 容器实例化的对象的生命周期。一个生命周期范围通常是 Singleton。

如果你让 DI 框架控制你的生命周期MySingleton,DI 就会正常工作。

但需要注意的是,任何注入到单例中的类也将是单例,无论这些依赖项的范围是如何定义的。

如果您无法使用或不想使用 DI 框架来创建MySingleton实例,实现相同目的的一种方法是使 DI 容器可用并手动从 DI 容器解析实例所需的任何内容。但有些人可能认为这是一种反模式。