总是创建一个新的HttpContextWrapper是否安全?
我想通过使用一些ASP.NET MVC对象,特别是HttpContextWrapper,使现有的ASP.NET Web窗体应用程序更多的单元可测试。我见过它的用法的例子,他们总是创建一个新的对象。我使用Reflector反汇编源代码,并看到它所做的就是存储传递的HttpContext。但我很好奇是否总是创建一个HttpContextWrapper的新实例是安全的,还是按照某种方式遵循单例模式?下面是我用我的应用程序总是创建一个新的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
是安全的。作为一种改进,您可以将此类设置为非静态,而不是使用静态方法,您可以将委托注入到构造函数中。然后,所有需要使用上下文的类(通常只限于您的webform页面)可能需要一个AppHttpContext
的实例。
我相信他试图模仿现有的模型。 AppHttpContext.Current.Session [“blah”]'简单地替换'HttpContext.Current.Session [“blah”]'引用。你能否详细说明你的建议可能与代码和用法?我可能会误解它。 – 2010-10-21 19:08:00
您可以给一些示例代码或任何解释代码的链接吗? – 2013-05-27 04:47:04
private readonly Func<HttpContextBase> _httpContext =() =>
new HttpContextWrapper(HttpContext.Current);
像这样的包装通常用来简单地将unmockable对象包装成可嘲弄的对象。这意味着他们的建设是微不足道的和不相关的。所以就去创建它们吧。 :) – bzlm 2010-10-22 13:23:56