我需要一个在ASP.NET中具有静态方法和变量的静态类来进行全局访问。但是我的静态类的生命周期只针对一个请求。静态构造函数在每个请求上都被调用:
public static class MyClass
{
private static object _obj;
static MyClass()
{
DoSomething();
}
private static void DoSomething()
{
}
public static void DoSomething2()
{
}
}
如果我在aspx页面中调用DoSomething2
,那么每次都会调用静态构造函数,因此DoSomething
在DoSomething2
之前每次都会被调用,而不是整个应用程序只调用一次。
更新:
我这样做:
public static class MyClass
{
private static MyClass2 _obj;
private static AppDomainSetup _setup;
private static AppDomain _domain;
static MyClass()
{
DoSomething();
}
private static void DoSomething()
{
// the AppDomainSetup is initialized here
//....
//
_domain = AppDomain.CreateDomain("MyDomain", AppDomain.CurrentDomain.Evidence, _setup);
_obj = (MyClass2)_domain.CreateInstanceAndUnwrap(typeof(MyClass2).Assembly.FullName, typeof(MyClass2).FullName);
}
public static void DoSomething2()
{
_obj.Method1();
}
}
所以我想使用MyClass2
中的对象,但由于性能原因,我只想实例化一次。
您可以设置一个静态标志,当它为true时,不需要像这样运行构造函数:
public static class MyClass
{
private static object _obj;
private static bool flag;
static MyClass()
{
if (!flag) {
DoSomething();
flag = true;
}
}
private static void DoSomething()
{
}
public static void DoSomething2()
{
}
}
我运行您的代码时没有经过我的编辑,它只为每个调用方法运行一次构造函数。