C#では、ASP.NETとNon-WEBの両方のアプリケーションの両方で機能する方法で、クラスが独自のアプリケーションエンドの最終化をどのように行うことができますか?

StackOverflow https://stackoverflow.com/questions/19847181

質問

ASP.NETアプリケーションで使用されるライブラリクラスと、アプリケーションの終了最終化が必要な非WEBアプリケーションがあります。

私のプロジェクトのライブラリ内で、開発者がGlobal.application_endまたはappdomain.currentdomain.processexitに呼び出しを追加することを要求することなく、クラスに独自のアプリケーションの最終化を行うことを望んでいます。

これはどうすればいいですか?

追加の背景/理論的根拠:

これらのオプションを検討したとしても、APPDOMAIN.CURRENTDOMAIN.PROCESSEXITは、ASP .NETアプリケーションがIISで停止したときに呼び出されないようです。およびglobal.application_endはasp .netに固有です。したがって、どちらのオプションも両方の状況と互換性がありません。

これが必要な理由の特定の例を持っているのに役立つ場合...この特定のケースでは、(私が理解しているように)sqldependency.startへの呼び出しが必要なSqldependencyを使用します。終了。

(見る http://msdn.microsoft.com/en-us/library/ms172133.aspx)

役に立ちましたか?

解決

この答えに記載されているシミュレートされた静的婚約者が記載されているようです。 https://stackoverflow.com/a/256278/449837, 、Webアプリケーションと非Webアプリケーションの両方で機能します。

これが私が働いているサンプルです:

public class ClassThatNeedsStaticFinalizer {

    // ... other class properties, methods, etc ...     

    #region Static Finalizer Emulation

    static readonly Finalizer finalizer = new Finalizer();
    private sealed class Finalizer
    {
        ~Finalizer()
        {
             //  ... Do final stuff here ...
        }
    }

    #endregion
}

(注:linqpadのような一部のコードスクラッチパッド環境の場合、〜ファイナルライザーはスクラッチパッドアプリ自体が閉じるまで発火しない可能性があります)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top