ControllerBuilder()
在解析Controller真實類型的過程中會先使用RouteData包含的命名空間如果解析失敗則通過由RouteData的DataTokens屬性得到的這個名為UseNamespaceFallback的變量值來判斷是否使用後備命名空間進行解析具體來說如果該值為True或者不存在則先通過當前ControllerBuilder的命名空間解析如果失敗則忽略命名空間直接采用類型名稱進行匹配否則會因找不到匹配的Controller而直接拋出異常
我們通過具體的例子來說明這個問題在一個ASPNET MVC應用中通過Area添加向導創建一個名稱為Admin的Area此時IDE會默認為我們添加了如下一個AdminAreaRegistration類型
NamespaceMvcAppAreasAdmin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{return Admin;}
}
public override void RegisterArea(AreaRegistrationContext context)
{
contextMapRoute(
Admin_default
Admin/{controller}/{action}/{id}
new { action = Index id = UrlParameterOptional }
)
}
}
}
AdminAreaRegistration類型定義在命名空間MvcAppAreasAdmin中現在我們在該Area中添加如下一個HomeController在默認的Action方法Index中我們從當前RouteData的DataTokens中提取這個名為UseNamespaceFallback的變量值並將它和解析出來的Controller類型名稱寫入當前HttpResponse而最終呈現在客戶端浏覽器中在默認情況下添加的HomeController類型被定義在MvcAppAreasAdminControllers命名空間下現在我們刻意將命名空間改為MvcAppAreasControllers
[] []
From:http://tw.wingwit.com/Article/program/net/201311/16090.html