我們知道MVC請求進來,然後路由匹配,然後找到控制器和Action,最後會調用Action方法,但是大家想想控制器是個普通的類,Action是個普通的實例方法,要想調用Action必須先實例化控制器,那麼MVC中如何實例化控制器的呢?
1、MVC請求進來會先進入到UrlRoutingHandler裏的ProcessRequest
2、然後進入到MVCHandler裏的ProcessRequest
3、MVCHandler裏的ProcessRequestInit,在這裏面實例化控制器
1、string requiredString = this.RequestContext.RouteData.GetRequiredString("controller");路由匹配之後產生的結果集RouteData,得到requiredString字符串,requiredString是個完整類型名稱
2、ControllerBuilder.GetControllerFactory();得到默認的控制工廠DefaultControllerFactory,然後通過DefaultControllerFactory的CreateController方法利用反射去創建Controller實例