Tengo una pregunta sobre Singletons ejecutándose dentro de IIS (6,7,7.5) y una aplicación web ASP.NET 4.0 (la aplicación MVC3 es específica).Singleton se ejecuta en aplicaciones web Asp.Net
Tengo un objeto singleton en mi proyecto al que se accede y se utiliza en global.ascx, en el inicio de la aplicación, así como en algunos otros lugares dentro de la aplicación.
Mi preocupación es que este singleton debe ser accesible en un escenario por instancia. Sin embargo, dado que IIS es esencialmente el proceso de alojamiento, ¿el singleton va a ser el mismo objeto en todas las instancias de la aplicación?
Si utilizo la palabra clave [ThreadStatic], ¿se separa en el nivel del Grupo de aplicaciones?
Finalmente, hay una manera, puedo asegurar que un singleton es solo un singleton por instancia de mi aplicación. es decir, si ejecuto mi aplicación en 1 sitio web, pero dentro de 5 directorios virtuales, hay 5 instancias del singleton o si ejecuto mi sitio web en 5 sitios web diferentes dentro del mismo grupo de aplicaciones.
Esperemos que sea lo suficientemente claro, en caso de que desee ver el objeto singleton, pegué la idea general de ello a continuación.
public sealed class Singleton : IDisposable
{
[ThreadStatic]
private static volatile Singleton _instance;
[ThreadStatic]
private static readonly object _syncRoot = new object();
public bool IsReleased { get; private set; }
public Singleton()
{
IsReleased = false;
}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
public void Dispose()
{
IsReleased = true;
Singleton._instance = null;
}
}
Todavía estoy confundido. ¿Sabes cómo funciona o no? ¿Puedes hacer la pregunta un poco más clara? – jcolebrand
Sé cómo funciona un singleton en un nivel por proceso. La pregunta es cómo lo manejará IIS en múltiples instancias de mi aplicación. – John
Solo por curiosidad, ¿por qué está desechable su singleton? ¿Esperas tener periodos de tiempo en los que desees que se elimine y luego lo resucitas cuando alguien lo solicita? Los singletons verdaderos normalmente no se eliminan hasta que finaliza la aplicación. – StriplingWarrior