gpt4 book ai didi

c# - 单例构造函数问题

转载 作者:行者123 更新时间:2023-11-30 22:46:10 25 4
gpt4 key购买 nike

我在 C# 中创建了一个 Singleton 类,其中包含一个公共(public)属性,我想在首次调用 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();我收到空引用异常,并且我看到 SessionFactory 为空...

为什么?

最佳答案

这不是单例。您应该引用 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;
}
}
}

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

关于c# - 单例构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2756548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com