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

问题描述 投票:1回答:1

我的项目中有一个Singleton,看起来像这样。

//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()
{
}

//[...]

这个Singleton包含了其他几个类的属性,这些属性绝对不应该是空的。

通常我会使用 依赖注入 来保证每个新对象在实例化时得到所有必要的参数。

IHelperClass Helper {get; set;}

IExectiveClass Executive {get; set;}

public NotMySingleton(IHelperclass helper, IExecutiveClass executive)
{
    Helper = helper;
    Executive = executive;
}

但我不知道如何结合 依赖注入 附带 单人模式.

有什么方法可以用DependenyInjection来使用Singleons? 常见的做法是什么? 我有什么其他选择? (如果这不是一个合适的选择)?

c# dependency-injection singleton
1个回答
2
投票

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

如果你让DI框架来控制你的对象的寿命,那么你就可以让DI框架来控制你的对象的寿命。MySingleton,DI就可以了。

但有一点需要注意,任何被注入到单体的类也将是一个单体,无论这些依赖的范围是如何定义的。

如果你不能或不想使用DI框架来创建你的 MySingleton 实例,实现同样目的的一种方法是让DI容器可用,然后手动从DI容器中解析实例所需要的任何东西。不过有人可能会认为这是一种反模式。

© www.soinside.com 2019 - 2024. All rights reserved.