2009-05-04 8 views
0

私はEnteprise Library 4.1のIExceptionHandlerを実装する必要があります。私の特別なケースでは、Fogbugzに例外を記録するためにそれを使用したいが、内部の詳細は私が求めているものではない。私が必要とするのは、ベストプラクティス - それを実装する方法、app.configまたはweb.configの設定を取得する方法です。などエンタープライズライブラリIExceptionHandlerを実装する方法?

私はこれまでのコードこれを持っている:

public class LcpFogbugzExceptionHandler : IExceptionHandler { 
    /// <summary> 
    /// Initializes a new instance of the <see cref="LcpFogbugzExceptionHandler"/> class. 
    /// </summary> 
    public LcpFogbugzExceptionHandler() { 
     // <param name="ignore">The ignore.</param> 
     //NameValueCollection ignore 
    } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="T:LcpFogbugzExceptionHandler"/> class. 
    /// </summary> 
    /// <param name="ignore">The ignore.</param> 
    public LcpFogbugzExceptionHandler(NameValueCollection ignore) { 
    } 

    /// <summary> 
    /// Handles the exception. 
    /// </summary> 
    /// <param name="exception">The exception.</param> 
    /// <param name="handlingInstanceId">The handling instance id.</param> 
    /// <returns></returns> 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.Convert.ToBoolean(System.String)")] 
    public Exception HandleException(Exception exception, Guid handlingInstanceId) { 
     // Perform processing here. The exception returned will be passed to the next 
     // exception handler in the chain. 

     return exception; 
    } 

} 

答えて

2

私はあなたがベストプラクティスによって何を意味するかわからない - あなたは正しいコード骨格を持っているので、ちょうどあなたの実装でそれを埋めます。役に立つかもしれないランダムな点:

通常の方法(ConfigurationManagerなど)で設定を読むことができます。あなたのハンドラは、最初にExceptionPolicy.HandleExceptionという同じプロセスとスレッドで実行されています。

複数のスレッドで例外を処理する必要がある場合に備えて、ハンドラコードをスレッドセーフにすることをお勧めします(このプロジェクトにない場合は、次のスレッドで処理する必要があります)。

非静的なインスタンスデータを呼び出しコードからハンドラに渡す場合は、処理中の例外のDataディクショナリに、ハンドラチェーン全体を通してそのまま保持され、呼び出し元にそのまま保存されますもう一度コードを入力します私はこのテクニックを使ってデータをハンドラに送り、ハンドラからデータを取り戻し、あるハンドラがチェーン内の次のアクションを制御できるようにしました。これを行う場合は、すべてDataの値がシリアライズ可能であることを確認してください。

関連する問題