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

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

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

  public class Global : SystemWebHttpApplication

  {

  protected void Application_Start(object sender EventArgs e)

  {

  //其他操作

  ControllerBuilderCurrentSetControllerFactory(

  new DefaultControllerFactory())

  }

  }

  作為默認ControllerFactory的DefaultControllerFactory類型定義如下激活Controller對象的前提是能夠正確解析出Controller的真實類型作為CreateController方法輸入參數的controllerName僅僅表示Controller的名稱我們需要加上Controller字符後綴作為類型名稱在DefaultControllerFactory類型被加載的時候(靜態構造函數被調用)通過BuildManager加載所有引用的程序集並得到所有實現了接口IController的類型並將其緩存起來在CreateController方法中根據Controller的名稱和命名空間從保存的Controller類型列表中得到對應的Controller類型並通過反射的方式創建它

  public class DefaultControllerFactory : IControllerFactory

  {

  private static List<Type> controllerTypes = new List<Type>()

  static DefaultControllerFactory()

  {

  foreach (Assembly assembly in BuildManagerGetReferencedAssemblies())

  {

  foreach (Type type in assemblyGetTypes()Where(

  type => typeof(IController)IsAssignableFrom(type)))

  {

  controllerTypesAdd(type)

  }

  }

  }

  public IController CreateController(RequestContext requestContext

  string controllerName)

  {

  string typeName = controllerName + Controller;

  Type controllerType = controllerTypesFirstOrDefault(

  c => stringCompare(typeName cName true) ==

  if (null == controllerType)

  {

  return null;

  }

  return (IController)ActivatorCreateInstance(controllerType)

  }

  }

       返回目錄ASPNET MVC 框架揭秘

       編輯推薦

       ASP NET開發培訓視頻教程

       Microsoft NET框架程序設計視頻教程

       Java程序性能優化讓你的Java程序更快更穩定

       Visual C++音頻/視頻技術開發與實戰

[]  []  


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