Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC.NET HttpSessionStateWrapper-什么是最佳使用实践?_C#_Asp.net Mvc 4_Httprequest_Httpcontext - Fatal编程技术网

C# MVC.NET HttpSessionStateWrapper-什么是最佳使用实践?

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

我们正在开发大型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中获取


使用包装器来扩展功能是一个好策略,还是它们仅用于创建测试模拟?

您将如何对其进行单元测试?我可以创建一个从CustomHttpContext和CustomContext的其余部分派生的模拟,并在创建上下文时注入它们。测试不是问题——问题是——使用上下文、请求、响应和会话包装器来扩展其功能是否正确,而不仅仅是为了测试。您无法创建模拟,因为您是从HttpContext派生的,HttpContext是不可模拟的。如果您从HttpContextBase继承,则可以对其进行模拟。当然,这并没有回答您的问题-只是想标记它:我将从HttpContextWrapper派生,它的基类型是HttpContextBase,所以创建mock是可能的:根据这个问题的答案,我将决定是扩展MVC包装器,还是按原样使用它们。在这两种情况下,测试都是可能的。