我正在尝试在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/

10-10 12:36