每次请求都会调用C#ASP.NET静态类构造函数



我需要一个在ASP.NET中具有静态方法和变量的静态类来进行全局访问。但是我的静态类的生命周期只针对一个请求。静态构造函数在每个请求上都被调用:

public static class MyClass
{
    private static object _obj;
    static MyClass()
    {
        DoSomething();
    }
    private static void DoSomething()
    {
    }
    public static void DoSomething2()
    {
    }
}

如果我在aspx页面中调用DoSomething2,那么每次都会调用静态构造函数,因此DoSomethingDoSomething2之前每次都会被调用,而不是整个应用程序只调用一次。

更新

我这样做:

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()
    {
    }
}

我运行您的代码时没有经过我的编辑,它只为每个调用方法运行一次构造函数。

最新更新