ASP Singleton.NET

Просто хотите удостовериться, что я не принимаю что-то глупое здесь при реализации шаблона "одиночка" в веб-приложении .NET ASP, которое объем статической переменной только для текущего сеанса пользователя, правильно? Если второй пользователь получает доступ к сайту, это - другой объем памяти...?

36
задан Majid 28 June 2017 в 06:11
поделиться

4 ответа

Область действия статических переменных предназначена для всего домена приложений, что означает, что к ней имеют доступ и другие сеансы. Только если у вас ферма с разными серверами, у вас будет более одного экземпляра переменной.

33
ответ дан 27 November 2019 в 05:33
поделиться

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

0
ответ дан 27 November 2019 в 05:33
поделиться

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

Чтобы сделать Singleton Global до только индивидуальных запросов, вы можете использовать словарь httpContext.Courent.items .

public class Singleton
{
    private Singleton() { }

    public static Singleton Instance 
    {   
        get
        {
            if (HttpContext.Current.Items["yourKey"] == null)
                HttpContext.Current.Items["yourKey"] = new Singleton();
            return (Singleton)HttpContext.Current.Items["yourKey"];
        }
    }
}
15
ответ дан 27 November 2019 в 05:33
поделиться

Если вам нужно, чтобы он был на основе пользователя или на основе сеанса, просмотрите следующую ссылку. В противном случае, как сказал Отавио, синглтон доступен для всего домена.

http://samcogan.com/singleton-per-asp-snet-session/

4
ответ дан 27 November 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: