En un sitio web ASP.NET, ¿las clases estáticas son exclusivas de cada solicitud web, o se crean instancias cuando es necesario y se GCed cuando el GC decide deshacerse de ellas?
La razón por la que pregunto es porque he escrito algunas clases estáticas antes en C # y el comportamiento es diferente de lo que esperaba. Hubiera esperado que las clases estáticas fueran únicas para cada solicitud, pero no parece que ese sea el caso.
Si no son exclusivos de cada solicitud, ¿hay alguna forma de permitir que lo sean?
ACTUALIZACIÓN:
La respuesta que me dieron driis fue exactamente lo que necesitaba. Ya estaba usando una clase singleton, sin embargo, estaba usando una instancia estática y, por lo tanto, se compartía entre solicitudes incluso si los usuarios eran diferentes, lo que en este caso era algo malo. El uso HttpContext.Current.Items
resuelve mi problema perfectamente. Para cualquiera que se encuentre con esta pregunta en el futuro, aquí está mi implementación, simplificada y acortada para que sea fácil de entender el patrón:
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(...)
perderá sus artículos porque se creará un nuevo HttpContext. Más detalles aquí: stackoverflow.com/questions/16697601/…