2010-07-13 14 views

回答

19

ControllerContext屬性未分配給繼承層次中的任何基礎構造函數。一個控制器由一個控制器工廠創建並傳回,但沒有分配ControllerContext屬性。

使用反射器,我們可以看看那裏的分配發生:

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

這是指在最早點您可以通過覆蓋ExecuteInitialize方法(但首先撥打base.Executebase.Initialize)訪問ControllerContext屬性:

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屬性,除非你處理不推薦分配自己,(作爲框架的部分將取決於具有該特性的絕對最早時間當時分配給)。

希望有所幫助。

+0

謝謝。這就是我需要的。 – 2010-07-13 13:58:14

相關問題