Solo quiero asegurarme de que no estoy asumiendo algo tonto aquí, al implementar el patrón singleton en una aplicación web ASP .NET el ámbito de la variable estática es solo para la sesión de usuario actual, ¿verdad? Si un segundo usuario está accediendo al sitio, ¿es un alcance de memoria diferente ...?ASP .NET Singleton
Respuesta
El ámbito de la variable estática es para todo el dominio de la aplicación, lo que significa que otras sesiones también tienen acceso a él. Solo si tiene una granja con servidores diferentes, tendría más de una instancia de la variable.
+1 "Solo si tiene una granja con diferentes servidores tendría más de una instancia de la variable ". –
Si lo necesita para ser usuario o sesión, consulte el siguiente enlace. De lo contrario, como dijo Otavio, el singleton está disponible para todo el dominio.
Su enlace parece estar muerto –
@Michael Lang: Sí, lo fue, parece que Sam cambió su motor de contenido. Actualizado el enlace con la nueva referencia. – NotMe
El Singleton se utiliza para todo el dominio de aplicación, si desea almacenar los datos relacionados con la sesión del usuario, uso HttpContext Sesión que está diseñado para ese propósito. Por supuesto, es probable que tenga que rediseñar la estructura de su clase para poder encontrar una forma de relación clave-valor-par con los datos con los que está tratando de trabajar.
Como otros han mencionado, es una variable estática global to the entire application, not single requests.
Para hacer un producto único mundial sólo a las solicitudes individuales, puede utilizar el diccionario HttpContext.Current.Items
.
public class Singleton
{
private Singleton() { }
public static Singleton Instance
{
get
{
if (HttpContext.Current.Items["yourKey"] == null)
HttpContext.Current.Items["yourKey"] = new Singleton();
return (Singleton)HttpContext.Current.Items["yourKey"];
}
}
}
Gracias, ¿Cuál es el costo de esto? ¿Será mucho más lento si estoy accediendo al singleton con bastante frecuencia? – Wesly
@Ws No debería notar ningún problema de rendimiento con este enfoque. La implementación del diccionario es bastante eficiente, por lo que no reducirá la velocidad de su aplicación, incluso si accede a ella mucho. –
¿por qué deberíamos usar "HttpContext.Current.Items" en lugar de "Session"? – Seva
Los miembros estáticos tener un alcance del proceso de trabajo actual sólo, por lo que no tiene nada que ver con los usuarios, ya que otras peticiones no son necesariamente manejados por el mismo proceso de trabajo.
- Para compartir datos con un usuario específico y entre solicitudes, use HttpContext.Current.Session.
- Para compartir datos dentro de una solicitud específica, use HttpContext.Current.Items.
- Para compartir datos en toda la aplicación, escriba un mecanismo para eso o configure IIS para que trabaje con un solo proceso y escriba una aplicación singleton/use.
Por cierto, el número predeterminado de procesos de trabajo es 1, por eso la web está llena de gente pensando que los miembros estáticos tienen un alcance de toda la aplicación.
Sesión para toda la aplicación por usuario. ViewState para página asp individual.
- 1. Integración ASP .Net WorldPay
- 2. ASP .NET ProcessModel configuración
- 3. asp net javascript Caché claro
- 4. ASP .net ubicación física actual
- 5. ¿Alguien usa membresía ASP .NET?
- 6. .NET y ASP contra PHP
- 7. Qué aprender - Ruby on Rails o ASP .NET MVC ... dado que estoy familiarizado con ASP .NET
- 8. ¿Puedo eliminar ASP .NET MVC 2 de Visual Studio si utilizo ASP .NET MVC 3?
- 9. ¿Una implementación singleton obvia para .NET?
- 10. ASP .NET MVC correcta UserControl arquitectura
- 11. asp .net mvc OnResultExecuting modify filterContext Resultado
- 12. WCF vs ASP .Net Web API
- 13. Prueba del controlador API web ASP .NET
- 14. Gestión de sesión en ASP .NET
- 15. Visual Studio ASP .Net MVC Intellisense
- 16. JQuery After Body ASP .NET MVC 4
- 17. .NET vs ASP.NET vs CLR vs ASP
- 18. ASP .NET Web Forms tradicionales vs MVC
- 19. Ignorar carpeta en ASP .NET MVC
- 20. ASP> net MVC parciales reutilizables
- 21. IIS 7.5 y ASP .NET 2.0
- 22. StructureMap y ASP .Net Web API y .Net Framework 4.5
- 23. ¿Cuál es el propósito del Tuple (T1)/Singleton en .net?
- 24. Programación de correo electrónico en C# (ASP .NET)
- 25. ASP .NET: No se puede llamar Página WebMethod usando jQuery
- 26. ASP .NET - ¿Qué está pasando detrás de un Eval()?
- 27. Cargar archivos grandes desde la aplicación ASP .NET
- 28. Longitud máxima de cadena de consulta en asp .net 2.0
- 29. Conexión para MySQL, VS2010 Pro, ASP .NET MVC3
- 30. Desde ASP clásico a .net C# o vb?
La respuesta corta es no, estás equivocado. –
Duplicado: http://stackoverflow.com/questions/194999/are-static-class-instances-unique-to-a-request-or-a-server-in-asp-net –