C# MVC.NET HttpSessionStateWrapper-什么是最佳使用实践?
我们正在开发大型MVC项目,我们打算使用HttpSessionStateWrapper以及HttpRequestWrapper、HttpResponseWrapper等来添加扩展功能来实现这些对象。它将添加会话消息、附加集合、html元数据和响应之类的东西,可以从控制器进行管理,需要时可以在视图中访问 我已经在一个较小的项目中完成了它,除了一些铸造问题外,它通常工作得很好,但是它可以通过不在控制器或最终视图之外使用包装来解决。每个控制器都是自定义控制器,其代码如下:C# MVC.NET HttpSessionStateWrapper-什么是最佳使用实践?,c#,asp.net-mvc-4,httprequest,httpcontext,C#,Asp.net Mvc 4,Httprequest,Httpcontext,我们正在开发大型MVC项目,我们打算使用HttpSessionStateWrapper以及HttpRequestWrapper、HttpResponseWrapper等来添加扩展功能来实现这些对象。它将添加会话消息、附加集合、html元数据和响应之类的东西,可以从控制器进行管理,需要时可以在视图中访问 我已经在一个较小的项目中完成了它,除了一些铸造问题外,它通常工作得很好,但是它可以通过不在控制器或最终视图之外使用包装来解决。每个控制器都是自定义控制器,其代码如下: public class C
public class Controller : System.Web.Mvc.Controller
{
public new CustomHttpResponse Response
{
get
{
return (CustomHttpResponse)HttpContext.Response;
}
}
public new CustomHttpRequestRequest
{
get
{
return (CustomHttpRequestRequest)HttpContext.Request;
}
}
//etc...
}
ContextWrapper将在自定义MvcHandler中创建。响应、请求和会话包装器将创建并从ContextWrapper中获取
使用包装器来扩展功能是一个好策略,还是它们仅用于创建测试模拟?您将如何对其进行单元测试?我可以创建一个从CustomHttpContext和CustomContext的其余部分派生的模拟,并在创建上下文时注入它们。测试不是问题——问题是——使用上下文、请求、响应和会话包装器来扩展其功能是否正确,而不仅仅是为了测试。您无法创建模拟,因为您是从HttpContext派生的,HttpContext是不可模拟的。如果您从HttpContextBase继承,则可以对其进行模拟。当然,这并没有回答您的问题-只是想标记它:我将从HttpContextWrapper派生,它的基类型是HttpContextBase,所以创建mock是可能的:根据这个问题的答案,我将决定是扩展MVC包装器,还是按原样使用它们。在这两种情况下,测试都是可能的。