Синглтон конструктор вопрос - PullRequest
2 голосов
/ 03 мая 2010

Я создал класс Singleton в c # с открытым свойством, которое я хочу инициализировать при первом вызове 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;
            }
        }
    }
}

Насколько я знаю, когда я впервые обращаюсь к объекту Instance BL в классе BL, он должен загрузить конструктор, и это должно инициализировать объект SessionFactory.

Но когда я пытаюсь: BL.Instance.SessionFactory.OpenSession (); Я получаю исключение нулевой ссылки и вижу, что SessionFactory имеет значение null ...

почему

1 Ответ

3 голосов
/ 03 мая 2010

Это не синглтон. Вы должны обратиться к превосходному руководству Джона Скита по синглетам в 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;
        }
    }
}

Обратите внимание, в частности, что экземпляр является статическим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...