C# 单例构造函数问题
我在c#中创建了一个Singleton类,它具有一个公共属性,我希望在第一次调用Singleton时初始化该属性 这是我写的代码:C# 单例构造函数问题,c#,singleton,C#,Singleton,我在c#中创建了一个Singleton类,它具有一个公共属性,我希望在第一次调用Singleton时初始化该属性 这是我写的代码: public class BL { private ISessionFactory _sessionFactory; public ISessionFactory SessionFactory { get { return _sessionFactory; } set { _sessionFactory = v
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类中处理实例BL对象时,它应该加载构造函数,并初始化SessionFactory对象
但当我尝试时:
BL.Instance.SessionFactory.OpenSession();
我得到一个空引用异常,我看到SessionFactory是空的
为什么?这不是单身汉。你应该参考Jon Skeet的优秀指南。例如,使用以下模式:
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;
}
}
}
请特别注意实例是静态的。
BL.instance
甚至不应该编译,因为实例
不是一个静态
属性。。。我认为实例
,实例
和这个锁
应该都是静态的
。是Dal.SessionFactory.CreateSessionFactory();返回null?您使用的是什么版本的C#/.NET?好的,那么我应该将ISessionFactory对象的初始化放在哪里(Dal.SessionFactory.CreateSessionFactory())?@gillyb:看起来它应该是类的只读实例成员,在构造函数中初始化。不过,您可能想先阅读以下内容: