Являются ли статические классы уникальными для каждого веб-запроса на веб-сайте ASP.NET или они создаются при необходимости и GCed всякий раз, когда GC решает их удалить?
Причина, по которой я спрашиваю, состоит в том, что я ранее написал несколько статических классов на C #, и поведение отличается от того, что я ожидал. Я ожидал, что статические классы будут уникальными для каждого запроса, но, похоже, это не так.
Если они не уникальны для каждого запроса, есть ли способ разрешить их отображение?
UPDATE:
Ответ, который дриса дала мне, был именно тем, что мне было нужно. Я уже использовал одноэлементный класс, однако он использовал статический экземпляр и поэтому распределялся между запросами, даже если пользователи были разными, что в данном случае было плохо. Использование 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;
}
}
}