2010-07-13 11 views

Respuesta

19

La propiedad ControllerContext no está asignada en ninguno de los constructores base en su jerarquía de herencia. Un controlador es creado por una fábrica de controladores y devuelto sin que se haya asignado la propiedad ControllerContext.

El uso del reflector, podemos ver que la asignación se lleva a cabo:

protected virtual void Initialize(RequestContext requestContext) 
{ 
    this.ControllerContext = new ControllerContext(requestContext, this); 
} 

El método Initialize se invoca desde lo virtual Ejecutar llamada al método:

protected virtual void Execute(RequestContext requestContext) 
{ 
    if (requestContext == null) 
    { 
     throw new ArgumentNullException("requestContext"); 
    } 
    this.VerifyExecuteCalledOnce(); 
    this.Initialize(requestContext); 
    this.ExecuteCore(); 
} 

Esto significa que el punto más próximo en el cual Puede acceder a la propiedad ControllerContext anulando el método Execute o Initialize (pero llamando primero al base.Execute o base.Initialize):

protected override void Execute(RequestContext requestContext) 
{ 
    base.Execute(requestContext); 

    // .ControllerContext is available from this point forward. 
} 

protected override void Initialize(RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 

    // .ControllerContext is available from this point forward. 
} 

Este último (Initialize) es el punto más absoluta a la que se puede utilizar la propiedad ControllerContext, a menos que se maneja la asignación a sí mismo, que no se recomienda (como partes del marco dependerán de tener esa propiedad asignado a en ese momento).

Espero que ayude.

+0

Gracias. Eso es lo que necesito. –

Cuestiones relacionadas