Исключение не дает ожидаемое сообщение - PullRequest
0 голосов
/ 03 апреля 2012

Я создал собственное исключение, однако при его запуске я не получаю ожидаемое сообщение.

Вместо сообщения Unhandled Execution Error я ожидаю срабатывания переопределения в моем пользовательском классе, которое будет The section 'UIButtons' does not contain an element with element key 'Save' в зависимости от исключения, которое выдается ниже.

Может кто-нибудь помочь мне диагностировать, почему это происходит?

using System;

namespace Payntbrush.Infrastructure.Application.Exceptions.Configuration
{
    [Serializable]
    public class ConfigElementDoesNotExistException : Exception
    {
        private string _sectionName;
        private string _elementName;

        public ConfigElementDoesNotExistException(string sectionName, string elementName, string errorMessage = "")
                             : base(errorMessage)
        {
            _sectionName = sectionName;
            _elementName = elementName;
        }

        public ConfigElementDoesNotExistException(string sectionName, string elementName, string errorMessage, Exception innerEx)
                             : base(errorMessage, innerEx)
        {
            _sectionName = sectionName;
            _elementName = elementName;
        }

        /// <summary>
        /// Gets a message that describes the current exception
        /// </summary>
        public override string Message
        {
            get
            {
                string exceptionMessage;

                if (String.IsNullOrEmpty(base.Message))
                {
                    exceptionMessage = base.Message;
                }
                else
                {
                    exceptionMessage = String.Format("The section '{0}' does not contain an element with element key '{1}'", _sectionName, _elementName);
                }

                return exceptionMessage;
            }
        }
    }
}

Чтобы бросить, я использую:

throw new ConfigElementDoesNotExistException("UIButtons", "Save");

И когда он срабатывает, я получаю это сообщение

Unhandled Execution Error

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: Payntbrush.Infrastructure.Application.Exceptions.Configuration.ConfigElementDoesNotExistException: 

1 Ответ

1 голос
/ 03 апреля 2012

Я думаю, вам следует изменить оператор if в вашем get переопределении Message на:

if (!String.IsNullOrEmpty(base.Message)) 

Обратите внимание на !.

В настоящее время, если сообщение, представленное в конструкции, является пустым или пустым, то вы возвращаете пустое / пустое значение, поэтому инфраструктура заполняет свою собственную, сообщая об исключении.

Предположительно, вы намеревались предоставить свое собственное сообщение , если оно пустое / пустое.

Незначительное обновление - рекомендация

Кстати, я обычно так делаю в конструкторе:

public MyException(string message) : base(message ?? "Default message") { }

В вашем случае я бы сделал это только одним конструктором:

public ConfigElementDoesNotExistException(string sectionName, 
                                          string elementName, 
                                          string errorMessage = null, 
                                          Exception innerEx = null)   
: base(errorMessage ?? string.Format("The section {0} doesn't ... {1}", 
                       sectionName ?? "[unknown]", elementName ?? "[unknown]")
       , innerEx)   
{   
  _sectionName = sectionName;   
  _elementName = elementName;   
}   

Также не забудьте о защищенном конструкторе и переопределении GetObjectData, чтобы гарантировать, что ваше исключение может быть сохранено / загружено и упорядочено должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...