Просто хотите удостовериться, что я не принимаю что-то глупое здесь при реализации шаблона "одиночка" в веб-приложении .NET ASP, которое объем статической переменной только для текущего сеанса пользователя, правильно? Если второй пользователь получает доступ к сайту, это - другой объем памяти...?
Область действия статических переменных предназначена для всего домена приложений, что означает, что к ней имеют доступ и другие сеансы. Только если у вас ферма с разными серверами, у вас будет более одного экземпляра переменной.
Синглтон используется для всего домена приложения, если вы хотите хранить данные, связанные с пользователем, используйте сеанс httpContext, который предназначен для этой цели. Конечно, вам, вероятно, приходится перепроектировать свою структуру классов, чтобы иметь возможность придумать способ для получения ключа, с помощью данных, с которыми вы пытаетесь работать.
Как упомянул другие, статическая переменная - это глобальная для всего приложения, а не отдельные запросы.
Чтобы сделать 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"];
}
}
}
Если вам нужно, чтобы он был на основе пользователя или на основе сеанса, просмотрите следующую ссылку. В противном случае, как сказал Отавио, синглтон доступен для всего домена.