C# 单例实例永远不会为空

C# singleton instance is never null

我正在尝试在 Azure web 作业中实现单例模式。在本地调试实例永远不会为空。它总是设置为单例对象本身。我觉得我在这里遗漏了一些非常明显的东西。

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 initialized" 单例模式是使用 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; } }
}