Здесь стандартный сценарий:
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 at atthay.
Это подводит нас к совершенно загадочному ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Текущее значение не является одним из Значения EnableSessionState.
Как вы можете видеть, его документация совершенно бесполезна. (Это так и в локальной, и в онлайн-справке.) Изучение самого класса показывает, что это радикальное переполнение для того, что я хочу.
Вкратце, мне нужно стандартное исключение, которое должно быть выбрано, если отсутствует параметр конфигурации приложения или содержит недопустимое значение. Вы могли бы подумать, что в Framework есть такое исключение, испеченное в нем для использования приложениями. (По-видимому, это было сделано, но оно было устаревшим и было заменено чем-то большим по объему.)
Какие решения, если таковые имеются, вы, ребята, используете для этого, и мне придется сосать его и катить свое исключение для этого?
Изменить добавления
Некоторые спрашивают, могу ли я предоставить значение по умолчанию и продолжить. В некоторых случаях да, и в тех случаях исключение не будет выбрано. Однако для определенных настроек это не будет применяться. Например: имена и учетные данные сервера баз данных, серверы аутентификации и пути к установленным сторонним приложениям.
Также стоит отметить, что приложение, над которым я в первую очередь работаю, - это консольное приложение, работающее в пакетном режиме, и я хочу, чтобы оно выдало исключение, которое было поймано основным методом и зарегистрировано соответствующим образом, если вещь не надлежащим образом сконфигурированы. (Это унаследованный код, который я унаследовал, и в настоящее время просто принимает все персик.)