我们知道MVC请求进来,然后路由匹配,然后找到控制器和Action,最后会调用Action方法,但是大家想想控制器是个普通的类,Action是个普通的实例方法,要想调用Action必须先实例化控制器,那么MVC中如何实例化控制器的呢?

1、MVC请求进来会先进入到UrlRoutingHandler里的ProcessRequest

1、看源码MVC如何实例化控制器?-LMLPHP

2、然后进入到MVCHandler里的ProcessRequest

1、看源码MVC如何实例化控制器?-LMLPHP

3、MVCHandler里的ProcessRequestInit,在这里面实例化控制器

1、string requiredString = this.RequestContext.RouteData.GetRequiredString("controller");路由匹配之后产生的结果集RouteData,得到requiredString字符串,requiredString是个完整类型名称

1、看源码MVC如何实例化控制器?-LMLPHP

1、看源码MVC如何实例化控制器?-LMLPHP

2、this.ControllerBuilder.GetControllerFactory();得到默认的控制工厂DefaultControllerFactory,然后通过DefaultControllerFactory的CreateController方法利用反射去创建Controller实例

1、看源码MVC如何实例化控制器?-LMLPHP

05-28 23:44