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)
但我不知道如何将DependencyInjection与Singleton Pattern结合起来。
有没有办法将单例与 DependenyInjection 一起使用? 什么是常见做法? 我有什么选择 (如果这不是合适的选择)?
所有 DI 框架都提供了一种方法来定义 DI 容器实例化的对象的生命周期。一个生命周期范围通常是 Singleton。
如果你让 DI 框架控制你的生命周期MySingleton,DI 就会正常工作。
但需要注意的是,任何注入到单例中的类也将是单例,无论这些依赖项的范围是如何定义的。
如果您无法使用或不想使用 DI 框架来创建MySingleton实例,实现相同目的的一种方法是使 DI 容器可用并手动从 DI 容器解析实例所需的任何内容。但有些人可能认为这是一种反模式。