MvcApplication! = singleton
lo que significa que todas las respuestas anteriores omiten el punto y te meterán en serios problemas si crees erróneamente que tienes acceso a la misma instancia mientras de hecho habrá varios.
Su primera suposición no es válida: Al contrario de (muy - simplemente vea las otras respuestas aquí como una prueba) creencia generalizada, MvcApplication NO es un singleton global. La clase se instancia varias veces, una instancia por "canalización", por lo que el conteo de rendimiento "recuento de instancias de canalización" le indica cuántas instancias de MvcApplication están actualmente consideradas con vida. Añadir una ctor defecto y probar esto por sí mismo:
public MvcApplication()
{
Trace.WriteLine(this.GetHashCode());
}
depuración romper la línea o ver los distintos códigos hash en DebugViewer. Para forzar el conteo de instancias de canalización ascendente cree un método con Thread.Sleep (5000), Asp.Net iniciará una nueva instancia una vez que realice otra solicitud http en paralelo.
Solución - ¿Cómo crear una instancia únicos en aplicaciones de ASP.NET (MVC) o WebForms
Si su clase MvcApplication sin embargo, tiene un método Application Start() entonces este método se llama en realidad sólo una vez, el proceso de ancho. Puede establecer campos estáticos allí. Simplemente póngalos en cualquier clase, típicamente MvcApplication es una buena opción convencional, y acceda a ellos. Al igual que
MvcApplication.MySingleValue = 72;
MvcApplication.ActivePlayersCount = 3400;
var n = MvcApplication.ActivePlayersCount;
...
HttpApplication WEIRDNESS
El diseño de la clase HttpApplication y sus eventos es bastante extraño, que presumiblemente tiene su razón en algún tipo suelto de compatibilidad con versiones anteriores de diseño a las páginas ASP de edad muy avanzada basada en COM. Allí el objeto de la aplicación fue de hecho creado solo una vez, que seguramente es el origen de la creencia errónea relacionada con Asp.Net.Un ejemplo de lo extraño HttpApplication:
protected void Application_Start()
{
}
Tenga en cuenta que no hay anulación participar!
En resumen, las instancias de la aplicación pueden ser de menor interés la mayor parte del tiempo, no veo ningún escenario donde podría ser relevante mantener el estado, ya que su estado sería compartido por un subconjunto arbitrario de solicitudes manejadas. Por lo tanto, acceder a él de la manera completamente precisa mencionada por Matt podría no ser necesaria con demasiada frecuencia.
¿Podría explicarnos qué es lo que está tratando de lograr con esto? Tal vez hay otra forma, incluso mejor, de llevar a cabo la tarea. – griegs
lo que quiero es: con mi aplicación mvc, quiero obtener el valor de la cadena de consulta cuando el usuario accede a la página de inicio como: http: // localhost: 2929 /? Source = abc. luego quiero configurar este source = abc en MvcApplication. public class MvcApplication: System.Web.HttpApplication { public string Fuente; // ..... } entonces quiero fuente disponible para todas las vistas: Quiero acceder a la fuente en el controlador constructor como: MvcApplication aplicación = HttpContext.Current.Application como MvcApplication cadena src = app.Source ; ... – KentZhou
Advertencia: antes de dejar este hilo con la respuesta marcada, lea mi respuesta a continuación, ya que las otras torres, incluida la marcada, se basan en la suposición errónea de que MvcApplication es un singleton global. – citykid