单身构造函数问题

时间:2010-05-03 06:53:57

标签: c# singleton

我在c#中创建了一个Singleton类,我想在首次调用Singleton时初始化一个公共属性。

这是我写的代码:

public class BL
{
    private ISessionFactory _sessionFactory;
    public ISessionFactory SessionFactory
    {
        get { return _sessionFactory; }
        set { _sessionFactory = value; }
    }

    private BL()
    {
        SessionFactory = Dal.SessionFactory.CreateSessionFactory();
    }

    private object thisLock = new object();

    private BL _instance = null;
    public BL Instance
    {
        get
        {
            lock (thisLock)
            {
                if (_instance == null)
                {
                    _instance = new BL();
                }
                return _instance;
            }
        }
    }
}

据我所知,当我第一次在BL类中处理Instance BL对象时,它应该加载构造函数并且应该初始化SessionFactory对象。

但是当我尝试: BL.Instance.SessionFactory.OpenSession(); 我得到一个Null Reference Exception,我看到SessionFactory为null ...

为什么?

1 个答案:

答案 0 :(得分:3)

这不是单身人士。你应该参考Jon Skeet关于singletons in C#的优秀指南。例如,使用此模式:

public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

特别注意该实例是静态的。