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

StackOverflow https://stackoverflow.com/questions/821643

Вопрос

Я должен реализовать обработчик 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;
    }

}
Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top