Son instancias de clase estáticas únicas para una solicitud o un servidor en ASP.NET?
En un ASP.NET sitio web, ¿son las clases estáticas únicas para cada solicitud web, o se instancian cuando es necesario y GCed cuando el GC decide deshacerse de ellos?
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 hubiera esperado. Hubiera esperado que las clases estáticas fueran únicas para cada solicitud, pero no parece que ese sea el caso.
Si no son únicos para cada solicitud, hay una manera de ¿permitir que lo sean?
ACTUALIZACIÓN:
La respuesta que Driis me dio fue exactamente lo que necesitaba. Ya estaba usando una clase singleton, sin embargo, estaba usando una instancia estática y, por lo tanto, se estaba compartiendo entre las solicitudes, incluso si los usuarios eran diferentes, lo que en este caso era algo malo. Usar HttpContext.Current.Items
resuelve mi problema perfectamente. Para cualquiera que tropiece 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;
}
}
}
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52