Global.asax.cs和Static变量

Mar*_*tin 6 c# asp.net asp.net-4.0 global-asax

在WCF服务中,我需要创建一个应该可以随时随地访问的变量.我的服务的所有方法都需要访问该数据,我只能加载一次.所以我想在Global.asax.cs中使用静态变量.但是我不确定该变量的范围是什么.该数据是否将用于所有请求?我的理解是它应该是因为应该在App域中使用相同的静态变量.那是对的吗?

public static IList<MyData> Data { get; set; } 
private static IList<MyData> Load() 
{
    return Big data struct from DB.
}

protected void Application_Start(object sender, EventArgs e)
{
    Data = Load();
}
Run Code Online (Sandbox Code Playgroud)

最后,有没有更好的方法来实现这一目标?我不是静态变量的忠实粉丝......

Joe*_*ton 5

您可以使用应用程序变量:

public static IList<MyData> Data {
    get
    {
        if (Application["MyIListData"] != null)
            return (IList<MyData>)Application["MyIListData"];
        else
            return new IList<MyData>();
    }
    set
    {
        Application["MyIListData"] = value;    
    }
} 

protected void Application_Start(object sender, EventArgs e)
{
    Data = Load();
}
Run Code Online (Sandbox Code Playgroud)

在实际实现中没有太大的不同,除了现在通过该变量名称作为应用程序变量全局可用.

  • 就个人而言,我发现像Application这样的全局无类型Hashtables比单个类型对象更糟糕.应用程序数据是否至少在应用程序域中共享? (2认同)