我正在尝试在Azure webjob中实现单例模式。在本地调试实例永远不会为空。它始终设置为单例对象本身。我觉得我在这里想念残酷的东西。
public sealed class HubErrorList
{
private static volatile HubErrorList instance;
private static object syncRoot = new Object();
private HubErrorList() {}
public static HubErrorList Instance
{
get {
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new HubErrorList();
}
}
}
return instance;
}
}
}
最佳答案
实例将保持为空,直到访问该属性。根据您检查的方式,您的工具可能会导致这种差异。
话虽如此,一个更简单,更好的“惰性初始化”单例模式将改为使用Lazy<T>
:
public sealed class HubErrorList
{
private static Lazy<HubErrorList> instance = new Lazy<HubErrorList>(() => new HubErrorList());
private HubErrorList() {}
public static HubErrorList Instance { get { return instance.Value; } }
}
关于c# - C#单例实例永远不会为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29902909/