シンプルなeインジェクタのドキュメントは、一時的な登録とシングルトンの登録の両方でどのように処分されるのかについてはっきりしています。ドキュメントは、事前に構築されたオブジェクト以外のすべてで登録されたシングルトンは、処分される。シンプルなインジェクタASP.NETのシングルトンの廃棄
私の質問には、特にASP.NETアプリケーションが破棄されるときに処分する必要があるというシングルトン登録が含まれています(そのサービスが破棄されたときに残りのメッセージを送信します)。私の登録のほとんどは一時的なものであり、それぞれのリクエストが処分されると処分されます。 VS/IISExpressでデバッグするとき、私のシングルトンがいつ廃棄されるのか、コンテナ自体が最終的に廃棄されるのを見ることはありません。私のコンソールアプリケーションで&紺碧のサービス私は単に完了したらcontainer.Dispose()を呼び出します。この最終的なクリーンアップのためのASP.NETの手がかりは?
このようなアプローチの問題については、私はまったく同意しますが、ほとんどの場合、何もしない(つまり、送信されていないメッセージを投げ捨てる)よりも優れています。冗長なアプローチを使用しても、フェイルセーフではありません。私が求めているのは、ホストされたIIS ASP.NET環境で、SimpleInjectorコンテナが破棄されていることを確認する正しい方法は何ですか。少なくとも、ローカルにキューに入れられたメッセージを試してみるチャンスがあります。 OWIN OnAppDisposingはApplication_Endと等価ですか? – pseabury
メッセージを失うことが問題である場合、私は本当にあなたのデザインを変更することをお勧めします。これらのメッセージは、残りのリクエスト実行と同じデータベーストランザクション内に保持されます。これは、メッセージの損失を防ぐ非常に一般的な方法です。 OWINについて:私はOnAppDisposingが何をしているのかよくわかりません。あなたはドキュメントを読んでこれをテストしなければなりません。 – Steven
特定のメッセージングがどのようにw.r.tで行われたかをもう一度見ていきます。データトランザクション。 IIRCでは、Azure ServiceBus(私たちが使用しているもの)へのメッセージの書き込みは、周囲のDBトランザクションスコープの外で行う必要がありました。 https://docs.particular.net/nservicebus/azure-service-bus/understanding-transactions-and-delivery-guarantees?version=asb_6を参照してください。ディスカッションありがとうSteven! – pseabury