2011-05-18 21 views
5

Tengo un controlador base ApplicationController que necesita tomar el host de URL y realizar algún procesamiento antes de que se activen los controladores secundarios. Como los constructores del controlador se disparan antes de que se inicialice RequestContext, tengo que anular el método Initialize para hacer mi procesamiento.¿Por qué se disparan los constructores del controlador antes del método de inicialización?

ApplicationController:

Protected Overrides Sub Initialize(ByVal requestContext As System.Web.Routing.RequestContext) 
     MyBase.Initialize(requestContext) 

     Dim host as String 
     host = Request.Url.Host.ToString 
    End Sub 

¿Cuál es la lógica detrás de tener Controlador de constructores fuego antes de que el método de inicialización?

También, ¿cuáles son las reglas sobre qué se debe colocar en el Método de inicialización?

Respuesta

10

Suponiendo que los constructores son el primer método de instancia que se dispara en una clase .NET, eso no debería ser una sorpresa y no es realmente algo MVC específico. Es más cómo funciona el .NET Framework.

El framework MVC primero necesita crear una instancia de un controlador y luego inicializarlo => llama al constructor primero. Y debido a que la realización de muchos códigos que potencialmente podrían arrojar excepciones, etc., no siempre es mejor colocarse en un constructor => la presencia del método Initialize. En lo que respecta a este método, debo admitir que he escrito muchos códigos ASP.NET MVC y nunca tuve que usarlos. Los filtros de acción siempre parecían una mejor alternativa.

Así que para responder a su pregunta:

también lo son las reglas a lo que debe ser colocado en el método initialize.

Nunca he puesto ningún código y nunca tengo que anular este método. Siempre he preferido usar filtros de acción porque de esta manera ya no estoy obligado a derivar de un controlador base común (no es que esto sea un problema).

+0

"Siempre he preferido el uso de filtros de acción porque de esta manera que ya no está en la obligación am de derivar de un controlador base común "en esta declaración, aquí hay un par de recursos que encontré útiles: http://stackoverflow.com/a/6119341/206297 ; http://odetocode.com/Blogs/scott/archive/2010/06/28/action-filter-versus-controller-base-class.aspx – ngm

-1

A veces, tal vez le gustaría que su solicitud inicialice sus variables, por lo que en este caso debe usar el método de inicialización .

Por ejemplo, si desea inicializar algunas variables de una manera diferente cuando la solicitud es local o no, etc.

Cuestiones relacionadas