我在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 ...
为什么?
答案 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;
}
}
}
特别注意该实例是静态的。