HttpContext, HttpContextBase, HttpContextWrapper之间关系

HttpContext是最原始的ASP.NET Context. MVC的目的之一是能够单元测试。

HttpContextBase, 是用来在MVC中替代HttpContext.但是这是一个abstract类,是重写的。

HttpContextWrapper是HttpContextBase的实现类,用来真正的替换HttpContext。

可以用new HttpContextWrapper(HttpContext)的方式来创建一个ttpContextWrapper。

观察代码可以发现,HttpContext与HttpContextWrapper在属性方法设置上基本上是一样的,

只是HttpContextWrapper不是virtual,有base class,因此可以进行单元测试。

现在,关于使用到HttpContext的方法,可以通过HttpContextWrapper来进行单元测试。

观察ASP.NET MVC的源码可以发现,在最终MVCHandler(ASP.NET MVC的HttpHandler)中,

调用ProcessRequest(HttpContext context)方法的时候,

其内部把HttpContext转为HttpContextWrapper,

然后调用了ProcessRequest(HttpContext context)来进行后续的处理。

 

以下为ASP.NET MVC源码:

ASP.NET MVC4源码:http://pan.baidu.com/s/1bnF8ZPt

好好学习,天天向上。
原文地址:https://www.cnblogs.com/Zhengxue/p/13048016.html