Singleton в ASP.NET (per-request singleton)
Классическая реализация Singleton'a с использованием статического поля класса не всегда подходит для ASP.NET: веб-сайт является приложением, которое запускается при первом запросе к нему и работает, пока в нём есть необходимость. Таким образом все пользователи веб-сайта будут использовать один и тот же экземпляр singleton'a, что не всегда желательно.
Часто бывает небходимо ограничить область видимости singleton'a текущим запросом конкретного пользователя. В этом случае для
хранения Instance'а можно использовать HttpContext.
public sealed class MySingleton
{
public static MySingleton Instance
{
get
{
return
(HttpContext.Current.Items["SOME_KEY"] ??
(HttpContext.Current.Items["SOME_KEY"] = new MySingleton())) as MySingleton;
}
}
//Конструктор
private MySingleton()
{
...
}
public string SomeMethod();
{
return "Hello, world!";
}
}
Пример использования:
string test = MySingleton.Instance.SomeMethod();
