Вот стандартный сценарий:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Проблема в том, что я не совсем уверен, какое исключение SomeStandardException
должно быть.
Я просмотрел платформу 3.5 и нашел двух вероятных кандидатов: _3 _ и ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Исключение, которое выдается при возникновении системной ошибки конфигурации.
Замечания
TheConfigurationException
exception is thrown if the application attempts to read or write data to the configuration file but is unsuccessful. Some possible reasons for this can include malformed XML in the configuration file, file permission issues, and configuration properties with values that are not valid.Примечание.
Объект
ConfigurationException
поддерживается для обратной совместимости. ОбъектConfigurationErrorsException
заменяет его в системе конфигурации.
Это исключение на самом деле звучит идеально для того, что мне нужно, но оно было помечено как устаревшее, поэтому ixnay on atthay.
Это подводит нас к совершенно загадочному ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Текущее значение не является одним из значений EnableSessionState.
Как видите, его документация совершенно бесполезна. (Так обстоит дело как в локальной, так и в онлайн-справке.) Изучение самого класса показывает, что это решительный перебор для того, что я хочу.
Вкратце, мне нужно стандартное исключение, которое должно выдаваться, когда параметр конфигурации приложения отсутствует или содержит недопустимое значение. Можно подумать, что в Framework есть такое исключение, которое можно использовать в приложениях. (По-видимому, так оно и было, но было помечено как устаревшее и было заменено чем-то гораздо по объему.)
Какие решения, если таковые имеются, вы, ребята, используете для этого, и мне придется смириться с этим и свернуть собственное исключение для этого?
Редактировать дополнения
Некоторые спрашивали, могу ли я указать значение по умолчанию, и продолжали. В некоторых случаях да, и в этих случаях исключение не будет сгенерировано. Однако для некоторых настроек это не применимо. Например: имена и учетные данные серверов базы данных, серверы аутентификации и пути к установленным сторонним приложениям.
Также стоит отметить, что приложение, над которым я в основном работаю, является консольным приложением, работающим в пакетном режиме, и я хочу, чтобы оно генерировало исключение, которое было перехвачено основным методом и зарегистрировано соответствующим образом, если это не настроено должным образом. (Это устаревший код, который я унаследовал, и в настоящее время он просто предполагает, что все безупречно.)
System.Configuration.ConfigurationErrorsException
обновлена. - person slolife   schedule 19.04.2018