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

 

posted @ 2020-06-05 09:58  流星泪  阅读(434)  评论(0编辑  收藏  举报