Лучшая практика ленивых загрузок синглтона для хранения объектов сеанса - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь использовать шаблон синглтона для хранения объектов сеанса для моего веб-приложения. Мне нужно посоветовать, если это самый эффективный способ сделать это.

Мое решение основано на исследовании, которое я провел над работой Джона Скита по этой теме.

    private const string SESSION_SINGLETON = "SINGLETON";

    private static readonly Lazy<SessionManager> lazy = new Lazy<SessionManager>(() => new SessionManager());

    public static SessionManager Instance
    {
        get
        {
            SessionManager instance;

            if (null == HttpContext.Current.Session[SESSION_SINGLETON])
            {
                instance = lazy.Value;
                HttpContext.Current.Session[SESSION_SINGLETON] = instance;
            }
            else
            {
                instance = (SessionManager)HttpContext.Current.Session[SESSION_SINGLETON];
            }

            return instance;
        }
    }

    private SessionManager()
    {
    }

    public string UserId { get; set; }
    public string OrganisationId { get; set; }

    public void Dispose()
    {
        HttpContext.Current.Session.Remove(SESSION_SINGLETON);
    }
}
...