【文件属性】:
文件名称:MVC源码学习:打造自己的MVC框架
文件大小:1.67MB
文件格式:PDF
更新时间:2021-09-12 12:21:04
MVC源码学习
目录
MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理) ............................................................................... 3
一、MVC原理解析 ................................................................................................................................................................... 4
1、MVC原理 ..................................................................................................................................................................... 4
二、HttpHandler ................................................................................................................................................................... 6
1、HttpHandler、IHttpHandler、MvcHandler的说明 ........................................................................................ 6
2、IHttpHandler解析 .................................................................................................................................................. 6
2.1、Asp.net管线事件简易说明 ........................................................................................................................ 6
2.2、Asp.net中常见的HttpHandler类型 ...................................................................................................... 7
2.3、自定义HttpHandler。 ............................................................................................................................. 10
3、MvcHandler解析 .................................................................................................................................................... 11
三、HttpModule ................................................................................................................................................................... 13
1、HttpModule能干什么 ............................................................................................................................................ 13
2、HttpModule的使用 ................................................................................................................................................ 14
3、HttpModule和HttpHandler如何区分 .............................................................................................................. 18
4、UrlRoutingModule解析 ....................................................................................................................................... 18
四、总结 ................................................................................................................................................................................. 22
MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码) ................................................................................. 23
一、版本一:搭建环境,实现MVC请求 ............................................................................................................................. 24
1、新建一个类库项目,我们暂且命名为Swift.MVC. ............................................................................................ 25
2、新建MvcHandler和UrlRoutingModule ........................................................................................................... 25
3、新建一个空的Web项目测试Swift.MVC .............................................................................................................. 26
二、版本二:完善MvcHandler和UrlRoutingModule ................................................................................................. 28
1、UrlRoutingModule的完善 ................................................................................................................................... 28
2、MvcHandler部分的完善 ........................................................................................................................................ 31
2.1、关于控制器工厂 ........................................................................................................................................... 32
2.2、控制器的父类实现 ....................................................................................................................................... 37
3、测试及代码释疑 ....................................................................................................................................................... 38
4、向Swift.MVC里面加入Model ............................................................................................................................. 47
三、版本三:加入自己的路由模块 ..................................................................................................................................... 49
四、总结 ................................................................................................................................................................................. 49
MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则) ................................................................. 50
一、版本三功能介绍 ............................................................................................................................................................. 51
二、UrlRoutingModule的实现 ......................................................................................................................................... 52
1、SwiftRouteTable.cs代码 .................................................................................................................................. 53
2、SwiftRouteCollection.cs代码........................................................................................................................ 53
3、SwiftRoute.cs代码 ............................................................................................................................................. 55
4、SwiftRouteData.cs代码 ..................................................................................................................................... 56
5、IRouteHandler.cs代码 ....................................................................................................................................... 56
6、UrlRoutingModule.cs代码 ................................................................................................................................ 57
三、MvcHandler的实现 ...................................................................................................................................................... 59
1、MvcHandler.cs ...................................................................................................................................................... 59
2、Controller.cs ...................................................................................................................................................... 61
四、测试以及代码释疑 ......................................................................................................................................................... 62
1、启动项目,首先进到全局配置文件的Application_Start()方法 ......................................................... 63
2、然后请求进到UrlRoutingModule里面,取SwiftRouteCollection的值: .................................... 64
3、然后请求进到SwiftRouteCollection类的GetRouteData()方法里面。这个方法的作用很明显,就是解析当前的请求的url,从中获取当前的controller、action、参数等信息。这个方法执行完之后得到的SwiftRouteData对象,结果如下: ......................................................................................................... 65
这个对象包含两个属性,RouteHandler和当前请求的路由表。 .................................................................. 66
4、通过步骤3知道,当前的swiftRouteData对象包含了RouteHandler对象, IRouteHandler routeHandler = routeData.RouteHandler; 结果如下: ........................................................................ 66
5、得到RouteHandler对象之后,就是从该对象的GetHttpHandler()方法里面得到当前的HttpHandler。 ................................................................................................................................................................................. 67
这个应该不难理解,将routeData和context传入MvcHandler里面。这就是为什么之前MvcHandler里面有一个两个参数的构造函数的原因。 ......................................................................................................... 68
6、然后就是执行 context.RemapHandler(httpHandler); 将请求正式交给MvcHandler。 .............. 68
7、在MvcHandler的ProcessRequest方法里面,首先从当前请求的路由表里面去控制器名称,如下图,得到”Home“: ........................................................................................................................................................ 68
8、然后就是创建控制器工厂、从工厂里面得到当前请求的控制器的对象,这部分和之前变化不大。 .... 69
9、得到控制器对象之后,执行对应的当前请求的action方法,请求尽到Controller这个父类的Execute()方法里面 ............................................................................................................................................. 69
10、通过反射,最终执行BootstrapTest()方法。 ....................................................................................... 70
11、BootstrapTest()方法执行完成之后,释放当前的控制器对象: factory.ReleaseController(controller); 。请求结束。 .......................................................... 70
五、支持方法的重载 ............................................................................................................................................................. 70
六、总结 ................................................................................................................................................................................. 71
MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎) ......................................................... 72
一、自定义ActionResult .................................................................................................................................................. 73
二、ContentResult和JsonResult的实现 .................................................................................................................... 74
三、解析视图引擎原理 ......................................................................................................................................................... 79
1、视图引擎原理解析 ................................................................................................................................................... 79
2、自定义视图引擎 ....................................................................................................................................................... 80
2.1、首先定义一个ViewResult去实现ActionResult ................................................................................ 80
2.2、在Controller.cs里面定义“快捷方法” ................................................................................................ 80
2.3、添加视图ViewIndex .................................................................................................................................. 81
四、RazorEngine实现视图引擎 ........................................................................................................................................ 82
1、基础用法 ................................................................................................................................................................... 82
2、作为视图引擎的实现 ............................................................................................................................................... 86
2.1、先定义一个ActionResult的实现类。由于缓存的key必须唯一,这里使用filepath作为缓存的Key,第一次加载缓存,之后访问该页面就很快了。 ....................................................................................... 86
2.2、在Controller.cs里面定义“快捷方法” ................................................................................................ 86
2.3、在具体的控制器里面调用 ........................................................................................................................... 87
2.4、对应的View页面。我们还是用html代替,当然如果你想要用cshtml的文件,只需要改下上述文件路径即可。 ......................................................................................................................................................... 87
五、NVelocity实现视图引擎 ............................................................................................................................................ 88
1、定义ActionResult的实现类VelocityViewResult ...................................................................................... 91
2、在Controller.cs里面添加“快捷方法” ............................................................................................................ 92
3、在具体的控制器里面调用 ....................................................................................................................................... 92
4、新建对应的视图 ....................................................................................................................................................... 92
六、VTemplate实现视图引擎 ............................................................................................................................................ 93
七、总结 ................................................................................................................................................................................. 93