我希望将静态值存储在类中,以便以后在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,以便轻松访问它的静态值。
也许我的思维过程在尝试这样做时存在缺陷,但我无法想到另一种方式。也许我需要离开这一段时间并享受假期,但我不能,我正在执行任务。 : - )
谢谢你的时间和建议。
答案 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的使用类似,但存储在缓存中的对象可以从缓存中移除(释放内存)。在这种情况下,您应该可以重新加载对象。