我构建了自己的Controller类,它继承自BaseController
。但是构造函数中的ControllerContext
为“null”。我应该在哪里指定ControllerContext
?
答案 0 :(得分:22)
{1}}属性未分配给继承层次结构中的任何基础构造函数。控制器由控制器工厂创建,并在没有分配ControllerContext
属性的情况下传回。
使用Reflector,我们可以查看分配的位置:
ControllerContext
从虚拟Execute方法调用中调用protected virtual void Initialize(RequestContext requestContext)
{
this.ControllerContext = new ControllerContext(requestContext, this);
}
方法:
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.
}
)是您可以使用ControllerContext属性的绝对最早的点,除非您自己处理该任务,这是不推荐的(因为框架的某些部分将取决于具有该属性)那时被分配了。)
希望有所帮助。