理論的解說一般都是枯燥的,研究一個代碼框架更是如此,似乎除了對大量的源碼加以解釋之外無話可說,但是這又是不可缺少的,否則應(yīng)用這樣的框架起來總有不放心之感,總有不少的坑要踩。更進一步講,一個好的框架應(yīng)該給它的使用者足夠的擴展空間(尤其是像MVC這樣的基礎(chǔ)框架),對框架本身沒有很好的把握則對于框架的擴展似乎就只能尋找別人的“成功”經(jīng)驗了,然而生搬硬套從來不是解決問題的好方法,合理運用他人經(jīng)驗與創(chuàng)造性的解決方案都離不開對框架的深入理解,從這方面來說代碼分析其實強于抽象的說明,因為代碼的邏輯是確定的,代碼的語言說服力其實強于書面語言(當(dāng)然是指編寫良好的代碼)。當(dāng)然對于代碼之外的討論也是非常必要甚至更加重要的,比如探討框架設(shè)計的思路和模式,框架應(yīng)用的相關(guān)實踐乃至對框架的擴展等等。此一系列文章都是基于Asp.net Mvc框架的源碼(包括Asp.net的一部分)對框架的基本設(shè)計與實現(xiàn)作出分析,另外參考了自己的一些項目以及當(dāng)前一些優(yōu)秀的開源項目(比如orchard)來討論框架的應(yīng)用與擴展。
Asp.net Mvc是當(dāng)前使用比較多的web框架,也是比較先進的框架,目前.net的大部分源碼都已經(jīng)開放,這大大方便了我們對Asp.net Mvc的分析,下面就從Http請求進入Mvc框架處理之前的基本流程說起。
由于各IIS版本和工作模式(經(jīng)典模式、集成模式)的不同,Http請求進入Asp.net的處理通道并不一樣,這里不去細(xì)究里面的細(xì)節(jié),就從創(chuàng)建應(yīng)用程序域開始:
AppManagerAppDomainFactory分析
注:AppDomainFactory及AppManagerAppDomainFactory類在System.Web.Hosting中實現(xiàn)
在創(chuàng)建Appdomain時會調(diào)用IAppDomainFactory接口,該接口的實現(xiàn)如下:
public sealed class AppDomainFactory : IAppDomainFactory { private AppManagerAppDomainFactory _realFactory; public AppDomainFactory() { _realFactory = new AppManagerAppDomainFactory(); } public Object Create(String module, String&nb