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