我建立了自己的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属性的最早时间是通过重写ExecuteInitialize方法(但首先调用base.Executebase.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属性的绝对最早的地方,除非您自己处理分配,否则不建议这样做(因为框架的某些部分将取决于当时分配该属性)。

希望能有所帮助。

10-01 13:08