Em um site ASP.NET, as classes estáticas são exclusivas para cada solicitação da Web ou são instanciadas sempre que necessário e submetidas ao GC sempre que o GC decide descartá-las?
A razão pela qual pergunto é porque escrevi algumas classes estáticas antes em C # e o comportamento é diferente do que eu esperava. Eu esperava que as classes estáticas fossem exclusivas para cada solicitação, mas não parece ser esse o caso.
Se eles não são exclusivos para cada solicitação, existe uma maneira de permitir que eles sejam?
ATUALIZAÇÃO:
A resposta que driis me deu foi exatamente o que eu precisava. Eu já estava usando uma classe singleton, no entanto, estava usando uma instância estática e, portanto, estava sendo compartilhada entre solicitações, mesmo que os usuários fossem diferentes, o que, nesse caso, era uma coisa ruim. Usar HttpContext.Current.Items
resolve meu problema perfeitamente. Para quem se deparar com essa questão no futuro, aqui está minha implementação, simplificada e abreviada para facilitar a compreensão do padrão:
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(...)
você perderá seus itens porque um novo HttpContext será criado. Mais detalhes aqui: stackoverflow.com/questions/16697601/…