2010-03-01 16 views
59

Estoy en el proceso de desarrollo de mi aplicación MVC y estaba pensando: ¿Cuánto dura la vida de una clase de controlador?¿Cuál es la vida útil de un controlador ASP.NET MVC?

¿Cuándo se crea? ¿Cuántas instancias de un solo controlador hay? ¿Cuáles son las implicaciones de las variables locales? cuando es destruido?

Estoy seguro de que hay un buen enlace en algún lugar en Internet, pero mi google-fu no pudo encontrarlo.

+0

Steve Sanderson ha producido un buen póster que representa el MVC [Solicitud de canalización] (http: //blog.stevensanderson.com/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipeline-poster /) que puede ser de su interés. –

Respuesta

44

Stephen Walther tiene un gran article en el ciclo de vida de una solicitud manejada por MVC Framework.

He aquí un extracto de la parte superior de su artículo, se pasa a explicar cada paso en detalle:

descripción de los pasos del ciclo de vida

Hay cinco pasos principales que surgen cuando hacer una solicitud de una página web ASP.NET MVC:

1. El RouteTable se creó

Este primer paso solo ocurre una vez cuando se inicia una aplicación ASP.NET por primera vez. RouteTable asigna URL a los manejadores.

2. Los UrlRoutingModule intercepta la solicitud

Este segundo paso ocurre cada vez que hagas un pedido. El UrlRoutingModule intercepta cada solicitud y crea y ejecuta el controlador de la derecha.

3. El MvcHandler Ejecuta

El MvcHandler crea un controlador, pasa el controlador un ControllerContext, y ejecuta el controlador.

4. El controlador ejecuta

El controlador determina el método controlador para ejecutar, construye una lista de parámetros, y ejecuta el método.

5. El método RenderView se Llamado

Típicamente, un método de controlador de llama RenderView() para representar el contenido de vuelta al navegador. Los delegados Controller.RenderView() de su trabajo a un ViewEngine particular,

+0

¡El enlace del artículo de Stephen Walther ya no es válido! – Hamed

+1

Esto no es una descripción de la 'vida útil' del controlador. Digamos que quiero iniciar una transacción cuando se crea el controlador, ejecutar cero o más acciones y luego comprometer las acciones como una unidad. ¿Cuándo, exactamente, está el controlador destruido? ¿Cuándo puedo llamar implícitamente el método 'Rollback' cuando hay un problema con una de las acciones? –

16

asumiendo que no cambia el valor predeterminado ControllerFactory, se crearán los controladores para cada solicitud y serán recolector de basura "en algún momento después de que" la solicitud ha completado .

En resumen, no necesita preocuparse por las condiciones de carrera para las variables de instancia (aunque lo hace para las variables estáticas, obviamente). Habiendo dicho eso, recomendaría mantener las acciones de su controlador reentrantes por el bien de un código más limpio.

Cuestiones relacionadas