我建立了一个继承自BaseController
的控制器类。然而,构造函数中的ControllerContext
是“null”。我应该在哪里指定ControllerContext
?
我建立了一个继承自BaseController
的控制器类。然而,构造函数中的ControllerContext
是“null”。我应该在哪里指定ControllerContext
?
ControllerContext
属性在您的继承层次结构的任何基类构造函数中都没有被分配。控制器是由控制器工厂创建并返回,而没有对 ControllerContext
属性进行分配。
使用 Reflector,我们可以查看赋值发生的位置:
protected virtual void Initialize(RequestContext requestContext)
{
this.ControllerContext = new ControllerContext(requestContext, this);
}
Initialize
方法是从虚拟的Execute
方法调用中调用的:
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 属性的绝对最早时间点,除非您自己处理了该赋值,但这不是推荐的方式(因为框架的某些部分将依赖于在此时分配该属性)。
希望这能有所帮助。