Корпоративная библиотека Как реализовать обработчик IExceptionHandler?
-
03-07-2019 - |
Вопрос
Я должен реализовать обработчик 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
значения сериализуемы.