我建立了自己的Controller类,该类继承自BaseController
。但是,构造函数中的ControllerContext
为“null”。我应该在哪里指定ControllerContext
?
最佳答案
继承层次结构中的任何基本构造函数中均未分配ControllerContext
属性。 Controller 是由 Controller 工厂创建的,并在没有分配ControllerContext
属性的情况下传递回去。
使用Reflector,我们可以查看分配发生的位置:
protected virtual void Initialize(RequestContext requestContext)
{
this.ControllerContext = new ControllerContext(requestContext, this);
}
从虚拟Execute方法调用中调用
Initialize
方法:protected virtual void Execute(RequestContext requestContext)
{
if (requestContext == null)
{
throw new ArgumentNullException("requestContext");
}
this.VerifyExecuteCalledOnce();
this.Initialize(requestContext);
this.ExecuteCore();
}
这意味着可以访问
ControllerContext
属性的最早时间是通过重写Execute
或Initialize
方法(但首先调用base.Execute
或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.
}
后者(
Initialize
)是可以使用ControllerContext属性的绝对最早的地方,除非您自己处理分配,否则不建议这样做(因为框架的某些部分将取决于当时分配该属性)。希望能有所帮助。