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

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

2022-06-13   來源: .NET編程 

    Controller的激活(

  Controller與ContrllerFactory

  我們為Controller定義了一個接口Icontroller如下面的代碼片段所示該接口具有唯一的方法Execute表示對Controller的執行該方法在MvcHandler的ProcessRequest方法中被執行而傳入該方法的參數是表示當前請求上下文的RequestContext對象

  public interface IController

  {

  void Execute(RequestContext requestContext)

  }

  從MvcHandler的定義可以看到Controller對象的激活是通過工廠模式實現的我們為Controller工廠定義了一個具有如下定義的IControllerFactory接口IControllerFactory通過CreateController方法根據傳入的請求上下文和Controller的名稱來激活相應的Controller對象

  public interface IControllerFactory

  {

  IController CreateController(RequestContext requestContext

  string controllerName)

  }

  在MvcHandler的ProcessRequest方法中它通過ControllerBuilder的靜態屬性Current得到當前的ControllerBuilder對象並調用GetControllerFactory方法獲得當前的ControllerFactory然後通過從RequestContext中提取的RouteData獲得Controller的名稱最後將它連同RequestContext一起作為參數調用ContollerFactory的CreateController方法實現對目標Controller對象的創建

  ControllerBuilder的整個定義如下面的代碼片段所示表示當前ControllerBuilder的靜態只讀屬性的Current在靜態構造函數中被創建SetControllerFactory和GetControllerFactory方法用於ContorllerFactory的注冊和獲取

  public class ControllerBuilder

  {

  private Func<IControllerFactory>    factoryThunk;

  public static ControllerBuilder     Current { get; private set; }

  static ControllerBuilder()

  {

  Current = new ControllerBuilder()

  }

  public IControllerFactory GetControllerFactory()

  {

  return factoryThunk()

  }

  public void SetControllerFactory(IControllerFactory controllerFactory)

  {

  factoryThunk = () => controllerFactory;

  }

  }

  再回頭看看之前建立在自定義ASPNET MVC框架的Web應用我們就是通過當前的ControllerBuilder來注冊ControllerFactory如下面的代碼片段所示注冊的ControllerFactory的類型為DefaultControllerFactory

[]  []  


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