Singleton в ASP.NET (per-request singleton)

26.11.2009 21:01 / Артём Волк / 1107 просмотров / ...

Классическая реализация 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();