我们正在开发大型MVC项目,我们有一个强度,使用HttpSessionStateWrapper(以及HttpRequestWrapper,HttpResponseWrapper等)来添加扩展功能来做这个对象。它将添加会话消息,附加集合,带有响应的html元数据 - 类似的东西,可以从控制器管理,并在需要时在视图中访问。
我已经在一个较小的项目中完成了它并且它通常运行良好,除了一些铸造问题在这里和那里,但它可以通过不使用控制器外部包装或最终视图来解决。每个控制器都是一个自定义控制器,其代码如下:
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创建并获取。
这是一个很好的策略,使用包装器来扩展功能,还是仅用于创建测试模拟的?