我试图通过使用一些ASP.NET MVC对象(特别是HttpContextWrapper)使现有的ASP.NET Web窗体应用程序更可单元测试。我已经看到了其用法的示例,它们总是创建一个新对象。我用Reflector分解了源代码,看到它所做的只是存储传递的HttpContext。但是我很好奇总是创建一个新的HttpContextWrapper实例或以某种方式遵循单例模式是否安全?以下是我在应用程序中使用的课程
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);
}
我使用它类似于HttpContext.Current
AppHttpContext.Current.Session["blah"] = "something";
最佳答案
您的AppHttpContext
课很棒。它完美地抽象了HttpContext并允许进行单元测试。使用HttpContextWrapper
是安全的。作为改进,您可以使此类为非静态类,而不是使用静态的SetContext
方法,您可以将委托注入到构造函数中。然后,所有需要与上下文一起使用的类(通常这些类只应限于您的Webform页面)可以采用AppHttpContext
的实例。
关于c# - 始终创建一个新的HttpContextWrapper是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3990879/