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

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

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

  private static bool IsNamespaceMatch(string requestedNamespace

  string targetNamespace)

  {

  if (!requestedNamespaceEndsWith(*

  StringComparisonOrdinalIgnoreCase))

  {

  return stringEquals(requestedNamespace targetNamespace

  StringComparisonOrdinalIgnoreCase)

  }

  requestedNamespacerequestedNamespace = requestedNamespaceSubstring(

  requestedNamespaceLength *Length)

  if (!targetNamespaceStartsWith(requestedNamespace

  StringComparisonOrdinalIgnoreCase))

  {

  return false;

  }

  return ((requestedNamespaceLength == targetNamespaceLength) ||

  (targetNamespace[requestedNamespaceLength] == ))

  }

  private Type GetControllerType(IEnumerable<string> namespaces

  Type[] controllerTypes)

  {

  var types = (from type in controllerTypes

  where namespacesAny(ns => IsNamespaceMatch(

  ns typeNamespace))

  select type)ToArray()

  switch (typesLength)

  {

  case : return null;

  case : return types[];

  default: throw new InvalidOperationException(具有多個匹配的Controller

  類型

  }

  }

  protected virtual Type GetControllerType(RouteData routeData

  string controllerName)

  {

  //省略實現

  }

  }

  如上面的代碼片段所示ReflectedControllerFactory具有一個靜態的controllerTypes字段用於保存所有被解析出來的Controller的類型在靜態構造函數中調用BuildManager的GetReferencedAssemblies方法得到所有被引用的程序集並得到所有定義其中的實現了IController接口的類型這些類型全部被添加到通過靜態字段controllerTypes表示的類型列表

  Controller類型的解析實現在受保護的GetControllerType方法中在用於最終激活Controller對象的CreateController方法中通過調用該方法得到與指定RequestContext和Controller名稱相匹配的Controller類型最終通過調用Activator的靜態方法CreateInstance創建相應的Controller對象

  ReflectedControllerFactory中定義了兩個輔助方法其中IsNamespaceMatch用於判斷Controller類型真正的命名空間是否與指定的命名空間(可能包含統配符)相匹配進行字符比較是忽略大小寫的私有方法GetControllerType根據指定的命名空間列表和類型名稱匹配的類型數組得到一個完全匹配的Controller類型如果得到多個匹配的類型直接拋出InvalidOperation異常並提示具有多個匹配的Controller類型如果找不到匹配類型則返回Null

       返回目錄ASPNET MVC 框架揭秘

       編輯推薦

       ASP NET開發培訓視頻教程

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

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

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

[]  []  


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