Azure: можем ли мы проверить, существует ли параметр, прежде чем пытаться его прочитать?

В настоящее время я использую RoleEnvironment.GetConfigurationSettingValue(propertyName) для получения значения параметра, определенного в моем файле конфигурации WebRole (csdef + cscfg). Хорошо, звучит правильно.

Это хорошо работает, если параметр существует, но сбой с исключением, если параметр не определен в csdef и cscfg.

Я переношу существующее приложение в Azure, которое имеет множество параметров конфигурации в файле web.config. В моем коде, чтобы прочитать значение параметра, я хотел бы проверить: если он существует в конфигурации webRole (csdef + cscfg), я читаю его отсюда, в противном случае я читаю его с помощью ConfigurationManager из web.config. Это предотвратит перенос всех настроек из моего web.config и позволит настроить их, когда приложение уже развернуто.

Есть ли способ сделать это ?

Я не хочу инкапсулировать GetConfigurationSettingValue в try/catch (и читать из web.config, если я ввожу catch), потому что это действительно уродливый способ (и в основном это неэффективно с точки зрения производительности!).

Спасибо !


person JYL    schedule 16.05.2011    source источник


Ответы (1)


Обновление для Azure SDK 1.7. Представлен класс CloudConfigurationManager. Это позволяет одному вызову GetSetting сначала просмотреть ваш cscfg, а затем вернуться к web.config, если ключ не найден.

http://msdn.microsoft.com/en-us/LIBRARY/jj157248

Pre 1.7 SDK Простой ответ — нет. (о котором я знаю)

Более интересная тема — рассматривать конфигурацию как зависимость. Я обнаружил, что полезно рассматривать параметры конфигурации как зависимость, чтобы со временем можно было изменить реализацию поддержки. Эта реализация может быть подделкой для тестирования или чем-то более сложным, например, переход с .config/.cscfg на реализацию базы данных для многофункциональных решений.

Учитывая эту оболочку конфигурации, вы можете написать этот TryGetSetting как внутренний метод для любого источника параметров конфигурации. Когда эта функция будет добавлена ​​к членам RoleEnvironment, вам нужно будет изменить только эту внутреннюю реализацию.

person Dennis Burton    schedule 16.05.2011