6

AppDomain.CurrentDomain.UnhandledException イベントにサブスクライブして、すべてのイベントに try catch を配置したくない新しいデザイン パターンを試しているので、エラーをキャッチしたいと考えています。

通常、win フォーム アプリにはメイン エントリ ポイントがありますが、これは別のアプリケーションによって呼び出されるクラス ライブラリです。

このイベントをフックできるクラス ライブラリにメイン エントリ ポイントはありますか、それとも、あるメソッドが他の何よりも先に呼び出されることが確実でない限り、クラス ライブラリでは不可能ですか?

4

2 に答える 2

1

いいえ、クラス ライブラリにはメイン エントリ ポイントがありません。必要な場合は、パブリック API サーフェス エリアを介して仮想的に作成することができます。つまり、どのオブジェクトが公開されているかを制限し、それらの公開オブジェクトで、ある時点で呼び出しが行われるようにします。これは、何かを実行する前にライブラリをセットアップするために、何らかのファクトリー コールを要求するという極端なものになる可能性があります。

于 2011-06-09T14:15:32.643 に答える
0
// Set the unhandled exception mode to force errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Add the event handler for handling thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

ブライアン・ディショーに感謝

明らかに、これはハンドラーを割り当てる非宣言的な方法を提供しません。たとえば、app.config でトレース リスナーを割り当てますが、それは私にアイデアを与えてくれます。

このコードを実行する独自の構成セクションを作成できます。次に、構成が読み込まれると、イベントハンドラーを割り当てることができます。その方法に関するリンクがいくつか見つかります...

ただし、構成はメイン アプリに存在する必要があるため、おそらくこれは正しくありません。

EDIT申し訳ありませんが、何らかの IoC フレームワークなしでこれを行う方法はないと思います。他に何がクラスをロードしますか。私が考えることができる唯一のオプションは、メインアプリケーションに何らかの変更を加える必要があります.

私は間違っていることに興味があります。

于 2011-06-09T14:11:07.317 に答える