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

时间:2016-01-05 08:23:13

标签: c# asp.net .net static global-variables

我需要一个静态类,在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中的对象,但由于性能的原因,我只想将其实例化一次。

1 个答案:

答案 0 :(得分:0)

你可以设置一个静态标志,当它的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()
    {

    }
}

我运行你的代码没有我的编辑,它只是一次runc构造函数为每个调用方法。