【发布时间】:2013-03-25 21:02:57
【问题描述】:
通常,当我们需要对当前应用程序状态的引用时,我们会使用:
HttpContext.Current.Appliction
但有时没有当前的 HttpContext(HttpContext.Current 返回null)。在这种情况下如何获取对当前应用程序实例的引用?
一个例子可以在Session_End 事件中。虽然我可以在Session_End 事件处理程序中使用Application 属性,但是如果处理程序调用库方法并且库代码中需要HttpApplicationState 对象怎么办?我不喜欢传递“应用程序”参数...
我也不喜欢将它保存在 static 字段中(如 Singleton 模式),我正在寻找一种直接从上下文中获取它的方法。
有什么方法可以直接访问实例(类似于HttpContext.Current.Application 方法)还是我必须选择上述不太干净的方法之一?
【问题讨论】:
-
我知道当您有通用处理程序页面 (IHttpHandler) 时,您可以实现 IRequiresSessionState 以使状态可用。
-
在我看来,在这种情况下使用静态/单例模式并没有什么不干净的地方。事实上,我会鼓励它。
-
@Moby 我没有任何强烈的反对意见,但我想要像
HttpContext.Current这样干净独立的东西。考虑一下我正在编写一个想要访问应用程序的库代码,而另一个人想要使用它的情况。如果我定义 Singleton,他仍然需要为我填充它。如果他定义它,我将无法访问它。在这种情况下,最好的方法是编写一个模块并让他注册它。将其与 HttpContext.Current 进行比较...如果框架为我们提供了一些选项,它“可能”会更容易和更清晰。
标签: c# asp.net web-applications asp.net-mvc-4 application-state