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