Singleton-Pattern ASP.NET C # для каждого пользователя - PullRequest
2 голосов
/ 16 сентября 2010

Я создаю веб-приложение с asp.net c #, и у меня есть класс, который я хочу использовать на нескольких страницах, каждый раз создавая его экземпляры. Мне нужно загрузить данные в него и никогда не потерять их во время сеанса пользователя. Я думал о шаблоне синглтона, но он разделял экземпляр класса между браузерами. Как я могу решить проблему?

Ответы [ 3 ]

7 голосов
/ 16 сентября 2010

Синглтон не ответ. Посмотрите на Состояние сеанса , ViewState и Cookies .

1 голос
/ 16 сентября 2010

Если у вас есть состояние сеанса inproc, вы можете использовать что-то вроде этого

class Singleton
{
    static object locker = new Object();

    public static Singleton Instance
    {
        get
        {
            var inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
            if (inst == null)
            {
                lock (locker)
                {
                    inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
                    if (inst == null)
                    {
                        inst = new Singleton();
                        HttpContext.Current.Session["InstanceKey"] = inst;
                    }
                }
            }
            return inst;
        }
    }
}

Код может быть улучшен, чтобы избежать блокировки для всех пользователей. Не знаю, если это хорошая идея для реализации Singleton, я бы порекомендовал вам посмотреть, можете ли вы создать свой код другим способом.

1 голос
/ 16 сентября 2010
UserData data = new UserData(somedata);

Session["UserData"] = data;

следующая страница

UserData data = (UserData) Session["UserData"];
...