C# 始终创建新的HttpContextWrapper安全吗?

C# 始终创建新的HttpContextWrapper安全吗?,c#,asp.net,asp.net-mvc,unit-testing,C#,Asp.net,Asp.net Mvc,Unit Testing,我试图通过使用一些ASP.NET MVC对象,特别是HttpContextWrapper,使现有的ASP.NET web表单应用程序更易于单元测试。我看到过它的使用示例,它们总是创建一个新对象。我用Reflector分解了源代码,看到它所做的只是存储传递的HttpContext。但我很好奇,总是创建一个HttpContextWrapper的新实例或以某种方式遵循singleton模式是否安全?下面是我在应用程序中使用的类 public static class AppHttpContext {

我试图通过使用一些ASP.NET MVC对象,特别是HttpContextWrapper,使现有的ASP.NET web表单应用程序更易于单元测试。我看到过它的使用示例,它们总是创建一个新对象。我用Reflector分解了源代码,看到它所做的只是存储传递的HttpContext。但我很好奇,总是创建一个HttpContextWrapper的新实例或以某种方式遵循singleton模式是否安全?下面是我在应用程序中使用的类

public static class AppHttpContext {
    public static HttpContextBase Current { get { return Getter(); } }

    public static void SetContext(Func<HttpContextBase> getter) {
        Getter = getter;
    }

    private static Func<HttpContextBase> Getter = () => new HttpContextWrapper(HttpContext.Current);
}

您的
AppHttpContext
类非常优秀。它完美地抽象了HttpContext并允许单元测试。使用
HttpContextWrapper
是安全的。作为一种改进,您可以使这个类成为非静态的,而不是使用静态的
SetContext
方法,您可以将委托注入构造函数中。然后,所有需要使用上下文的类(通常这些类应仅限于您的Web表单页面)都可以使用
AppHttpContext

private readonly Func\u httpContext=()=>
private readonly Func<HttpContextBase> _httpContext = () =>
    new HttpContextWrapper(HttpContext.Current);
新的HttpContextWrapper(HttpContext.Current);
我相信他是在模仿现有的模式。其中
AppHttpContext.Current.Session[“blah”]
只是替换
HttpContext.Current.Session[“blah”]
引用。你能详细说明你的建议吗?可能包括代码和用法?我可能有点误读了。你能给出一些示例代码或任何用代码解释的链接吗?像这样的包装器通常只是用来将不可修改的对象包装成可修改的对象。这意味着它们的构造是琐碎和无关的。那就去创造它们吧。:)
private readonly Func<HttpContextBase> _httpContext = () =>
    new HttpContextWrapper(HttpContext.Current);