0

Enterprise Library 5.0 Exception Handling には Wrap Handler が含まれています。これにより、例外が別の例外でラップされ、ラッパー例外がスローされます。

エラーが発生したときに有効だったパラメーターや設定に関する情報など、ラッパーの例外に追加情報を追加したいと考えています。これはトラブルシューティングに役立ちます (このラッパー例外はより高いレベルのハンドラーによってキャッチされ、ログに記録されるため)。

私は次のコードを使用していました:

ExceptionManager em = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
em.Process(() => { DoSomething(); }, "WrapPolicy");

この結果は、カスタム例外にラップされてスローされる例外です。これはクリーンで簡単ですが、私のコードはラッパーの例外インスタンスを認識しないため、追加情報を追加することはできません。

従来の Try...Catch でアクションをラップし、HandleException メソッドを手動で実行する以外に、ラッパー例外インスタンスに追加情報を挿入する方法はありますか?

4

2 に答える 2

0

どのような追加情報を追加したいかはわかりませんが、Process メソッドの優雅さを維持したい場合は、適切な情報をラッパー例外に追加するカスタム WrapHandler を作成できます。良い候補は、追加情報を Exception.Data IDictionary に追加することです。

メソッドの引数を探している場合、おそらくそれを行う唯一の方法は、独自の「コンテキスト」を作成し、そこに値を設定し、コンテキストからそれらを抽出してラッピング例外に追加することです。

もう 1 つのより洗練されたアプローチは、ポリシー インジェクションを使用することです。呼び出しハンドラーは、スローされた例外だけでなく、メソッド パラメーターにもアクセスできます。既存の ExceptionCallHandler を変更して、元の例外または新しい例外に情報を追加できます。コンテキスト情報を元の例外に追加すると、その情報は例外ポリシーによって処理されます (ロギングを含む場合があります)。

于 2012-08-10T05:26:29.180 に答える
0

ラップ ハンドラーを構成するときに、例外メッセージを指定できます。

    var builder = new ConfigurationSourceBuilder();

    builder.ConfigureExceptionHandling()
               .GivenPolicyWithName("MyPolicy")
               .ForExceptionType<NullReferenceException>()
                 .WrapWith<InvalidOperationException>()
                   .UsingMessage(messageBasedOnSomeRuntimeInfo)
                 .ThenNotifyRethrow();

    var configSource = new DictionaryConfigurationSource();
    builder.UpdateConfigurationWithReplace(configSource);
    EnterpriseLibraryContainer.Current 
          = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
于 2012-08-08T16:57:02.440 に答える