На веб-сайте ASP.NET, являются ли статические классы уникальными для каждого веб-запроса, или они создаются при необходимости, и GCed всякий раз, когда GC решает избавиться от них?
Причина, по которой я спрашиваю, состоит в том, что я написал несколько статических классов раньше в C #, и поведение отличается от того, что я ожидал. Я ожидал, что статические классы будут уникальными для каждого запроса, но, похоже, это не так.
Если они не уникальны для каждого запроса, есть ли способ позволить им быть?
ОБНОВЛЕНИЕ:
ответ, который дриса дала мне, был именно тем, в чем я нуждался. Я уже использовал одноэлементный класс, однако он использовал статический экземпляр и поэтому распределялся между запросами, даже если пользователи были разными, что в данном случае было плохо. Использование 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;
}
}
}
filterContext.Result = new RedirectResult(...)
наперед : если вы перенаправите ваш запрос, скажем, с вами вы потеряете свои товары, потому что будет создан новый HttpContext. Более подробная информация здесь: stackoverflow.com/questions/16697601/…