【发布时间】:2013-04-12 20:02:16
【问题描述】:
在一个 Web 项目中,我在 global.asax.cs 中定义了一个需要在整个应用程序中访问的公共静态变量(Store)。
public class Global : HttpApplication
{
public static UserDataStore Store;
void Application_Start(object sender, EventArgs e)
{
Store = new UserDataStore();
Store.CurrentUsers = new Hashtable();
}
void Session_Start(object sender, EventArgs e)
{
if (!Store.UserExists(HttpContext.Current.Session.SessionID))
Store.AddUser(HttpContext.Current.Session.SessionID, "StubUser");
}
}
我需要在另一个无法引用 Web 项目(并且它是全局对象)的项目中访问它,因为它会导致循环引用。
我的解决方法是尝试使用 HttpApplication 对象检索 Store:
UserDataStore udStore = (UserDataStore) HttpContext.Current.Application["Store"];
这会编译,但返回一个空对象。
我已经对谷歌视而不见,试图找到其他类似的例子,但我发现的大部分内容都支持以下两种方法之一:
- 使用 Application[""] 变量,这是次优的,用于根据本文的经典 ASP 兼容性:http://support.microsoft.com/kb/312607
- 通过 Web 项目的 Global 类访问它,这不是我们当前设置中的选项。
这似乎应该是可能的,所以希望我错过了一些愚蠢的东西。
您能提供的任何帮助将不胜感激。谢谢。
【问题讨论】:
-
该范围内的 Application[""] 不应该与 HttpContext.Current.Application 相同吗?你在哪里分配它?即:HttpContext.Current.Application["Store"] = Store.
标签: c# static global-asax