Enterprise Library Como implementar um IExceptionHandler?
-
03-07-2019 - |
Pergunta
Eu tenho que implementar um IExceptionHandler para o Enteprise Biblioteca 4.1. No meu caso particular, eu quero usá-lo para registrar a exceção a Fogbugz mas os detalhes internos não é o que eu estou perguntando. O que eu preciso é como - melhores practicies - implementá-lo, Como obter a configuração para um app.config ou web.config. etc.
Eu tenho o código Este até agora:
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;
}
}
Solução
Eu não tenho certeza que você entende por melhores práticas - você tem o código esqueleto correto para apenas preenchê-lo com a sua implementação. pontos aleatórios que podem ser úteis:
Você pode ler as definições de configuração na maneira normal (ConfigurationManager
etc). O manipulador está sendo executado no mesmo processo e thread que chamou ExceptionPolicy.HandleException
em primeiro lugar.
Seria uma boa idéia para fazer thread-safe o código manipulador, caso em que você tem que exceções punho em vários segmentos (e se não o fizer nesse projeto, você pode precisar no próximo).
Se você quiser passar quaisquer dados de instância não-estáticos para o manipulador do código de chamada, você pode preencher o dicionário Data
da exceção sendo tratado, que será preservada através de toda a cadeia de manipulador e para o código de chamada novamente. Eu tenho usado essa técnica para enviar dados para um manipulador, voltar dados para fora de um manipulador, e permitir um manipulador para controlar as ações do próximo na cadeia. Se você fizer isso, certifique-se que todos os valores Data
são serializáveis.