Библиотека предприятия Как реализовать IExceptionHandler?

Я должен реализовать IExceptionHandler для библиотеки Enteprise 4.1. В моем конкретном случае я хочу использовать это, чтобы записать исключение в 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;
    }

}

1 ответ

Решение

Я не уверен, что вы подразумеваете под лучшими практиками - у вас правильный скелет кода, поэтому просто заполните его своей реализацией. Случайные точки, которые могут быть полезны:

Вы можете прочитать настройки конфигурации обычным способом (ConfigurationManager так далее). Ваш обработчик работает в том же процессе и потоке, который вызвал ExceptionPolicy.HandleException на первом месте.

Было бы неплохо сделать код обработчика потокобезопасным на тот случай, если вам придется обрабатывать исключения в нескольких потоках (а если вы этого не сделаете в этом проекте, вам может понадобиться в следующем).

Если вы хотите передать любые нестатические данные экземпляра в обработчик из вызывающего кода, вы можете заполнить Data словарь обрабатываемой исключительной ситуации, который будет сохранен в целой цепочке обработчиков и снова выведен в вызывающий код. Я использовал эту технику, чтобы отправить данные в обработчик, получить данные обратно из обработчика и позволить одному обработчику управлять действиями следующего в цепочке. Если вы делаете это, убедитесь, что все Data значения сериализуемы.

Другие вопросы по тегам