如何在任何页面上存储静态类对象以进行调用?

时间:2014-11-28 17:32:46

标签: c# asp.net class properties static

我希望将静态值存储在类中,以便以后在Web中的任何页面上使用。所有用户的值都是相同的。

Page_Init:从各自的源中检索全局变量,并将它们分配给GlobalStaticVariables类中的类内的静态对象。

我打电话来设置MasterPage的静态值,如此

protected void Page_Init(object sender, EventArgs e)
{
    Web.StartUp.SetGlobalStaticVariables(this.Page);
}
///Removed most objects for the sake of brevity
public static Info.GlobalStaticVariables SetGlobalStaticVariables(object _this)
{
    Info.GlobalStaticVariables.Some_StringValue = ConfigurationManager.AppSettings["Some_StringValue"].ToString();
    Info.GlobalStaticVariables.Database.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    Info.GlobalStaticVariables.IIS.DomainName = ((Page)_this).Request.Url.Host;
}
///Removed most objects for the sake of brevity
public class Info
{
    public class GlobalStaticVariables
    {
        public static string Some_StringValue { get; set; }
        public class Database
        {
            public static string ConnectionString { get; set; }
        }
        public class Ldap
        {
            public static List<string> ServerList { get; set; }
        }
    }
}

我认为我应该首先看看Session对象是否存在,然后创建它是否因为我读过有时静态值可能因appPool回收而丢失等等。

我想我应该从MasterPage这样做,因为我必须参考&#34; Session&#34;但我不知道如何将Page对象传递给类文件中的属性。

我在MasterPage中使用以下内容来存储当前用户,所以我认为我可以使用全局变量做类似的事情。到目前为止,我一直没有成功。

public MyClass.Users.CurrentUser GetSetCurrentUser
{
    get
    {
        if (Session["CurrentUser"] == null) GetSetCurrentUser = new MyClass.Users.CurrentUser();
        return (MyClass.Users.CurrentUser)Session["CurrentUser"];
    }
    set { Session.Add("CurrentUser", value); }
}

使用上一个,我还必须为每个想要引用GetSetCurrentUser属性(Master.GetSetCurrentUser)的页面添加以下内容,但我希望尽可能避免这种情况。

<%@ MasterType VirtualPath="~/mp.Master" %>

不幸的是,当我尝试使用GlobalStaticVariables时,除了.Equals,.GetHashCode,.GetType和.ToString之外,没有出现intellisense。

我希望能够从任何页面调用属性GlobalStaticVariables,以便轻松访问它的静态值。

也许我的思维过程在尝试这样做时存在缺陷,但我无法想到另一种方式。也许我需要离开这一段时间并享受假期,但我不能,我正在执行任务。 : - )

谢谢你的时间和建议。

1 个答案:

答案 0 :(得分:1)

您正在查找Context属性页面中可用的HttpApplicationState,该属性包含Application属性。

如何使用它:

void Page_Load(object sender, EventArgs e) 
{
     var last = Context.Application["lastActivity"];
     lblLastActivity.Text = last == null?"(none)": ((DateTime) last).ToString();
     Context.Application["lastActivity"] = DateTime.Now;
}

另一个选项是Cache的使用类似,但存储在缓存中的对象可以从缓存中移除(释放内存)。在这种情况下,您应该可以重新加载对象。