На веб-сайте ASP.NET существуют статические классы, уникальные для каждого веб-запроса, или они создаются при необходимости и GCed всякий раз, когда GC решает удалить их?
Причина, о которой я прошу, заключается в том, что я написал некоторые статические классы ранее в С#, и поведение отличается от того, что я ожидал. Я бы ожидал, что статические классы будут уникальными для каждого запроса, но похоже, что это не так.
Если они не уникальны для каждого запроса, есть ли способ разрешить им быть?
UPDATE:
Ответ driis дал мне именно то, что мне нужно. Я уже использовал одноэлементный класс, однако он использовал статический экземпляр и поэтому делился между запросами, даже если пользователи были разными, что в этом случае было плохим. Использование HttpContext.Current.Items
отлично решает мою проблему. Для тех, кто наткнется на этот вопрос в будущем, вот моя реализация, упрощенная и сокращенная, чтобы было легко понять шаблон:
using System.Collections;
using System.Web;
public class GloballyAccessibleClass
{
private GloballyAccessibleClass() { }
public static GloballyAccessibleClass Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if(!items.Contains("TheInstance"))
{
items["TheInstance"] = new GloballyAccessibleClass();
}
return items["TheInstance"] as GloballyAccessibleClass;
}
}
}