我們知道MVC請求進來,然後路由匹配,然後找到控制器和Action,最後會調用Action方法,但是大家想想控制器是個普通的類,Action是個普通的實例方法,要想調用Action必須先實例化控制器,那麼MVC中如何實例化控制器的呢? 1、MVC請求進來會先進入到UrlRoutingHandler里 ...
我們知道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、this.ControllerBuilder.GetControllerFactory();得到預設的控制工廠DefaultControllerFactory,然後通過DefaultControllerFactory的CreateController方法利用反射去創建Controller實例