使用HttpContext.Current(C#)访问Global.asax.cs中的Public Static变量时遇到问题

时间:2013-04-12 20:02:17

标签: c# static global-asax

在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项目(以及它的Global对象)的项目中访问它,因为它会导致循环引用。

我的解决方法是尝试使用HttpApplication对象检索Store:

UserDataStore udStore = (UserDataStore) HttpContext.Current.Application["Store"];

这会编译,但会返回一个null对象。

我试图找到其他像这样的例子,但我发现其中的大部分内容都支持两种方法之一:

  1. 根据本文使用应用程序[“”]变量,这些变量是次优的并且用于经典ASP兼容性:http://support.microsoft.com/kb/312607
  2. 通过Web项目的Global类访问它,这在我们当前的设置中不是一个选项。
  3. 这似乎应该是可能的,所以希望我错过了一些愚蠢的东西。

    非常感谢您提供的任何帮助。感谢。

2 个答案:

答案 0 :(得分:3)

使用共享数据制作第三个(库)项目,并从其他两个项目中引用它。

答案 1 :(得分:1)

Application [“”]应该与HttpContext.Current.Application相同。你还记得加上这个价值吗?您可以从Application_Start调用其中任何一个。

Application["Store"] = Store 

HttpContext.Current.Application["Store"] = Store