首先,我們要先在web.config中註冊MyMVC的HttpHandlerFactory,它是整個架構的入口。
在ASP.NET的管線過程中,會調用GetHandler()方法,終於My Code有機會運行了!
架構執行的第一行代碼是:
// 根據請求路徑,定位到要執行的ActionControllerActionPair pair = UrlParser.ParseAjaxUrl(virtualPath);
public sealed class ControllerActionPair{ public string Controller; public string Action;}靜態方法UrlParser.ParseAjaxUrl()就是專門用來解析URL並返回ControllerActionPair的:
代碼很簡單,核心其實就是那個Regex,從URL中提取Controller,Action的名字全靠它。
至於Regex的使用,我想這是個基本功,這裡就略過了。
再來看AjaxHandlerFactory的第二個調用:
// 擷取內部表示的調用資訊InvokeInfo vkInfo = ReflectionHelper.GetAjaxInvokeInfo(pair);
ReflectionHelper類是一個內部使用的工具類,專門用於反射處理,AjaxAction尋找過程的相關代碼如下(注意代碼中的注釋):
上面就是AjaxAction尋找相關的4段代碼:
1. 在ReflectionHelper的靜態建構函式中,我載入了所有AjaxController。
2. GetAjaxController方法用於根據一個Controller的名字返回Controller的類型描述。
3. GetAjaxAction方法用於根據Controller的類型以及要調用的Action的名字返回Action的描述資訊。
4. GetAjaxInvokeInfo方法用於根據從AjaxHandlerFactory得到的ControllerActionPair描述轉成更具體的描述資訊。
代碼中,Action的尋找過程採用了延遲的載入模式,儲存Action描述資訊的集合我採用了安全執行緒的Hashtable
【相關推薦】
1. 精選:“php程式員工具箱”V0.1版本下載
2. ASP免費視頻教程
3. 入門級的.NET MVC 執行個體
4. .NET MyMVC架構執行Action的過程詳解
5. .NET MyMVC架構如何給方法賦值的教程
6. .NET MyMVC架構處理傳回值的教程