Ось стандартний сценарій:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Проблема полягає в тому, що я не зовсім певний, якимSomeStandardException
має бути виняток .
Я ознайомився з Рамкою 3.5 і знайшов двох ймовірних кандидатів: ConfigurationException
і ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Виняток, який видається, коли сталася помилка системи конфігурації.
Зауваження
ConfigurationException
Виняток , якщо додаток намагається зчитувати або записувати дані в файл конфігурації , але безуспішно. Деякі можливі причини цього можуть включати неправильно сформований XML у файлі конфігурації, проблеми з дозволом файлів та властивості конфігурації зі значеннями, які не є дійсними.Примітка:
ConfigurationException
Об'єкт підтримується для зворотної сумісності.ConfigurationErrorsException
Об'єкт замінює його для конфігурації системи.
Цей виняток насправді звучить ідеально для того, що мені потрібно, але він був позначений застарілим, значить, ixnay on atthay.
Це приводить нас до ретельно дивовижних ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Поточне значення не є одним із значень EnableSessionState.
Як бачите, його документація є абсолютно марною. (Це так і в локальній, і в онлайн-довідці.) Експертиза самого класу показує, що це надмірно надмірна оцінка того, чого я хочу.
Коротше кажучи, мені потрібен стандартний виняток, який слід викинути, коли параметр конфігурації програми відсутній або містить недійсне значення. Ви можете подумати, що у Рамці був застосований такий виняток для використання програм. (Мабуть, це було, але воно було відмічене застарілим, і його замінило щось значно більше за обсягом.)
Які рішення, якщо такі є, ви, хлопці, використовуєте для цього, і мені доведеться це висмоктати і перекласти власний виняток для цього?
Редагувати доповнення
Деякі запитували, чи можу я вказати значення за замовчуванням чи ні, і продовжувати. У певних випадках, так, і в тих випадках виняток не буде кинутий. Однак для певних налаштувань це не стосується. Наприклад: імена та облікові дані серверів бази даних, сервери аутентифікації та шляхи до встановлених сторонніх додатків.
Варто також зазначити, що програма, над якою я в основному працюю, - це консольний додаток, що працює в пакетному режимі, і я хочу, щоб він викинув виняток, який потрапляє в основний метод і реєструється належним чином, якщо річ не налаштована належним чином. (Це спадковий код, який я успадкував, і наразі просто передбачає, що все персично.)
System.Configuration.ConfigurationErrorsException
оновлено.