代码之家  ›  专栏  ›  技术社区  ›  Brian J. Hakim

从BaseController继承的自定义控制器中存在Null ControllerContext

  •  7
  • Brian J. Hakim  · 技术社区  · 15 年前

    BaseController . 然而 ControllerContext 在构造函数中为“null”。我应该在哪里指定 控制器上下文

    1 回复  |  直到 12 年前
        1
  •  22
  •   Matthew Abbott    15 年前

    这个 ControllerContext 控制器上下文

    使用Reflector,我们可以查看任务发生的位置:

    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();
    }
    

    这意味着您可以访问 属性是通过重写 Execute 方法(但调用 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属性的最早时间点,除非您自己处理分配,这是不推荐的(因为框架的一部分将取决于当时是否分配了该属性)。

    希望有帮助。