熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET MVC 4框架揭秘:Controller(2)[1]

2013-11-13 12:31:53  來源: .NET編程 

    Controller(

  通過Visual Studio的Controller創建向導創建的Controller類型實際上繼承自抽象類SystemWebMvcController它是ControllerBase的子類如下面的代碼片段所示除了直接繼承ControllerBase之外Controller類型還顯式地實現了IController和IAsyncController接口以及代表ASPNET MVC 四大篩選器(AuthorizationFilterActionFilterResultFilter和ExceptionFilter)的個接口(我們會在第Action的執行中對篩選器進行詳細介紹)

  public abstract class Controller :

  ControllerBase

  IController

  IAsyncController

  IActionFilter

  IAuthorizationFilter

  IExceptionFilter

  IResultFilter

  IDisposable

  …

  {

  //省略成員

  }

  同步還是異步

  從抽象類Controller的定義可以看出它同時實現了IController和IasyncController這兩個接口意味著它既可以采用同步的方式(調用Execute方法)執行也可以采用異步的方式(調用BeginExecute/EndExecute方法)執行但是即使執行BeginExecute/EndExecute方法Controller也不一定是以異步方式執行的

  如下面的代碼片段所示Controller具有一個布爾類型的屬性DisableAsyncSupport表示是否關閉對異步執行的支持在默認的情況下該屬性總是返回False即支持以異步方式執行ControllerBeginExecute方法會根據DisableAsyncSupport屬性決定究竟是調用Execute方法以同步的方式執行還是調用BeginExecuteCore/EndExecuteCore方法以異步的方式執行換句話說如果我們希望Controller總是以同步的方式來執行可以將DisableAsyncSupport屬性設置為True

  public abstract class Controller: …

  {

  //其他成員

  protected virtual bool DisableAsyncSupport

  {

  get{return false;}

  }

  protected virtual IAsyncResult BeginExecute(RequestContext requestContext

  AsyncCallback callback object state)

  {

  if (thisDisableAsyncSupport)

  {

  //通過調用Execute方法同步執行Controller

  }

  else

  {

  //通過調用BeginExecuteCore/EndExecuteCore方法異步執行Controller

  }

  }

  protected virtual IAsyncResult BeginExecuteCore(AsyncCallback callback

  object state)

  protected virtual void EndExecuteCore(IAsyncResult asyncResult)

  }

  現在我們通過一個簡單的實例來演示屬性DisableAsyncSupport對默認創建的Controller執行的影響我們在一個ASPNET MVC應用中定義了一個具有如下定義的默認Home Controller它重寫了ExecuteExecuteCoreBeginExecute/EndExecute和BeginExecuteCore/ EndExecuteCore六個方法同時將相應的方法名寫入響應並最終呈現在浏覽器上

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/16097.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.