我倒是看过源码,不过框架结构是啥东西?
以MVC2为例(一直到MVC5大框架没变)。
主要是Routing模块 -> Controller -> ActionInvoker -> ViewEngine这样。
Routing已经整合在http://ASP.NET内部了,主要就是个双向路由,把URL变成RouteData以及把RouteData变回成URL。
Controller工厂部分读取RouteData查找Controller,Controller类型数据会被缓存下来,查找到Controller后创建ControllerDescriptor。
从ControllerDescriptor创建Controller实例,然后根据RouteData找到ActionDescriptor,然后交由ActionInvoker执行。
ActionInvoker先调用ModelBinder对参数进行数据绑定,ModelBinder通过IValueProvider获取值,再组织成强类型对象,并绑定到参数上。
所有参数值都搞定后就是直接执行Action方法,得到一个结果ActionResult,执行ActionResult输出HTML。这个中间会自动套上ActionFilter执行。当然,AuthorizationFilter和ExceptionFilter也是在这里一并处理的。
如果ActionResult是ViewResult,则在执行的时候会调用ViewEngine来创建IView对象,然后把ViewContext传进去渲染HTML。
一般用的是Razor视图,Razor视图会把cshtml文件即时编译成一个WebPage的派生类型,然后RazorView会将ViewContext丢给这个类型渲染HTML。
基本就是这样,应该没什么遗漏了。