.NET: Какое исключение выдается, когда требуемый параметр конфигурации отсутствует? - PullRequest
112 голосов
/ 06 января 2009

Вот стандартный сценарий:

if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
   throw new SomeStandardException("Application not configured correctly, bozo.");

Проблема в том, что я не совсем уверен, , какое исключение SomeStandardException должно быть.

Я изучил 3.5 Framework и нашел двух вероятных кандидатов: ConfigurationException и ConfigurationErrorsException.

System.Configuration.ConfigurationException

Исключение, которое выдается, когда ошибка конфигурации системы произошло.

Замечания

ConfigurationException Исключение составляет бросить, если приложение пытается читать или записывать данные в файл конфигурации, но есть безуспешными. Некоторые возможные причины для этого может включать в себя искаженный XML в файл конфигурации, файл вопросы разрешения и конфигурации свойства со значениями, которые не являются действительный.

Примечание:

Объект ConfigurationException поддерживается для обратной совместимости. ConfigurationErrorsException объект заменяет его для Конфигурация системы.

Это исключение на самом деле звучит идеально для того, что мне нужно, но оно помечено как устаревшее, так что ixnay на atthay.

Это подводит нас к совершенно загадочным ConfigurationErrorsException:

System.Configuration.ConfigurationErrorsException

Текущее значение не является одним из Значения EnableSessionState.

Как видите, его документация совершенно бесполезна. (Это относится как к локальной, так и к интерактивной справке.) Проверка самого класса показывает, что это радикальное излишество для того, что я хочу.

Короче говоря, мне нужно стандартное исключение, которое должно создаваться, если параметр конфигурации приложения отсутствует или содержит недопустимое значение. Вы могли бы подумать, что в платформе есть такое исключение, запрограммированное для приложений (По-видимому, так и было, но оно было помечено как устаревшее и было заменено чем-то намного большего по объему.)

Какие решения, если таковые имеются, вы, ребята, используете для этого, и мне придется смириться с этим и выдвинуть свое собственное исключение для этого?

Редактировать приложения

Некоторые спрашивают, могу ли я предоставить значение по умолчанию и продолжаю. В некоторых случаях да, и в этих случаях исключение не будет выброшено. Однако для определенных настроек это не будет применяться. Например: имена и учетные данные сервера базы данных, серверы аутентификации и пути к установленным сторонним приложениям.

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

Ответы [ 11 ]

0 голосов
/ 06 января 2009

Вы можете попробовать унаследовать исключение XML или просто использовать его.

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