Библиотека предприятия Как реализовать IExceptionHandler? - PullRequest
0 голосов
/ 04 мая 2009

Я должен реализовать 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 Ответ

2 голосов
/ 26 июня 2009

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

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

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

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

...