C# 在ASP.NET MVC中,如何在应用程序生命周期内只初始化和反初始化一次

C# 在ASP.NET MVC中,如何在应用程序生命周期内只初始化和反初始化一次,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我有一个静态类,我需要在第一次使用的类期间初始化一些代码,并在应用程序进程死亡时取消初始化。实际上,init方法使用pJoNK方法调用本机C++ ++ API。我知道我可以使用静态构造函数,但现在我需要在最后调用一个本机de init方法 public static class MyClass { static MyClass() { MyInitFirstTime(); } 静态类没有任何本机方法,但您可以改用AppDomainDoma

我有一个静态类,我需要在第一次使用的类期间初始化一些代码,并在应用程序进程死亡时取消初始化。实际上,init方法使用pJoNK方法调用本机C++ ++ API。我知道我可以使用静态构造函数,但现在我需要在最后调用一个本机de init方法

public static class MyClass
{
    static MyClass()
    {
        MyInitFirstTime();
    }        

静态类没有任何本机方法,但您可以改用AppDomain
DomainUnload
event:

public static class MyClass
{
    static MyClass()
    {
        AppDomain.CreateDomain("dummy").DomainUnload += CurrentDomain_DomainUnload;

        MyInitFirstTime();
    }

    private static void CurrentDomain_DomainUnload(object sender, EventArgs e)
    {
        // Free resources
    }
}

您可以使用Application\u Start和Application\u End“特殊方法”代替静态类

应用程序开始和应用程序结束方法是特殊方法 不代表HttpApplication事件的。ASP.NET只调用它们一次 针对应用程序域的生命周期,而不是针对每个应用程序域 HttpApplication实例


另一个选项是覆盖或。如果您决定覆盖Dispose(),请不要忘记调用基类Dispose()方法。

也许您可以使用Global.asax文件中的应用程序生命周期,但您无法控制
static
构造函数。。。我认为,如果你解释一下你想要实现什么,以及你想发布/取消初始化什么,你可能会得到更好的帮助。这个问题可能是@HoomanBahreini需要在应用程序启动和应用程序完成时调用本机函数,换句话说,在创建进程和退出进程时。我还发现了ProcessExit函数,所以哪一个更准确?@user960567:肯定
DomainUnload
。与
DomainUnload
不同,
ProcessExit
事件是定时的!表示CLR允许每个appdomain在终止前2秒运行
ProcessExit
处理程序application@user960567:对!但重点仍然存在
ProcessExit
是定时的,不能保证在应用程序终止之前完成!(答案已更新,以涵盖您指出的问题。不是最好的,但至少有效)