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

}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top