0

我必须为 Enteprise Library 4.1 实现一个 IExceptionHandler。在我的特殊情况下,我想用它来记录 Fogbugz 的异常,但内部细节不是我要问的。我需要的是如何 - 最佳实践 - 实现它,如何获取 app.config 或 web.config 的配置。等等

到目前为止,我有代码:

   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;
    }

}
4

1 回答 1

2

我不确定你所说的最佳实践是什么意思——你的代码框架是正确的,所以只需用你的实现来填充它。可能有用的随机点:

您可以以正常方式(ConfigurationManager等)读取配置设置。ExceptionPolicy.HandleException您的处理程序在最初调用的同一进程和线程中运行。

使处理程序代码线程安全是一个好主意,以防您必须在多个线程中处理异常(如果您不在这个项目中,您可能需要在下一个项目中)。

如果您想将任何非静态实例数据从调用代码传递到处理程序,您可以填充Data正在处理的异常的字典,该字典将通过整个处理程序链原封不动地保存并再次输出到调用代码。我已经使用这种技术将数据发送到处理程序,从处理程序中取回数据,并允许一个处理程序控制链中下一个处理程序的操作。如果这样做,请确保所有Data值都是可序列化的。

于 2009-06-26T12:00:58.743 回答