我有下一个静态类:
public static class GlobalVar
{
public static string DatabaseName = "ProjectDatabase.mdf";
public static AdminClass Admin;
public static string TruePath = AppDomain.CurrentDomain.BaseDirectory;
public static string TimeStampPattern = "dd/MM/yyyy HH:mm";
static GlobalVar()
{
TruePath = TruePath.Remove(TruePath.Length - 1);
Admin = new AdminClass("Admin", "Admin");
GlobalStatus = new Dictionary<string, string>();
string Query = "SELECT * FROM global_status";
DataTable Types = MyAdoHelper.ExecuteDataTable(GlobalVar.DatabaseName, Query);
foreach (DataRow Status in Types.Rows)
{
GlobalStatus.Add(Status["title"].ToString(), Status["info"].ToString());
}
}
public static Dictionary<string, string> GlobalStatus;
public static string BasePath = HttpContext.Current.Request.ApplicationPath;
}
GlobalStatus是一个字典,可以收到网站可能返回的自定义错误。当我启动项目(Microsoft Visual Web developer 2008)时,它会出错:
Object reference not set to an instance of an object.
尝试从GlobalStatus获取值时(例如GlobalVar.GlobalStatus [“Page_NoAccess”])。
只有一分钟后,当我再次启动项目时,它运行良好。
如何解决此问题,例如强制浏览器等待它填满GlobalStatus。我需要这个类只初始化一次,因为它包含全局变量,我不想在每次浏览器请求时调用它。
由于
答案 0 :(得分:2)
首先,我想建议你在面向对象的代码中使用全局变量概念是一个坏主意。
为了解决您的问题,您需要使用内置的,开箱即用的ASP.NET approaches: global application class.
在此事件期间使用Application_Start
事件处理程序并调用初始化过程。
任何与上述陈述相反的观点都是一个坏主意。
现在......如何做得更好
Initialize()
,Start()
... 等静态方法创建静态类。在全局应用程序类的Application_Start
事件中调用它们。更新&amp;注意 我建议这个MSDN article关于静态构造函数,以便理解为什么这些在ASP.NET初始化中是个坏主意。