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