Лазурный :можем ли мы проверить, существует ли параметр, прежде чем пытаться его прочитать?
-
14-11-2019 - |
Вопрос
В настоящее время я использую RoleEnvironment.GetConfigurationSettingValue(propertyName)
чтобы получить значение параметра, определенного в моем конфигурационном файле WebRole (csdef + cscfg).О'кей, звучит правильно.
Это хорошо работает, если параметр существует, но произошел сбой, за исключением случаев, когда параметр не определен в csdef и cscfg.
Я переношу существующее приложение в Azure, которое имеет множество параметров конфигурации в web.config.В моем коде, чтобы прочитать значение настройки, я хотел бы протестировать :если он существует в конфигурации WebRole (csdef + cscfg) Я прочитал его отсюда, в противном случае я прочитал его с помощью ConfigurationManager из web.config.Это предотвратило бы перенос всех настроек из my web.config и позволило бы настроить их, когда приложение уже развернуто.
Есть ли способ сделать это ?
Я не хочу инкапсулировать GetConfigurationSettingValue
в try / catch (и прочитайте из web.config, если я введу catch), потому что это действительно уродливый способ (и в основном это неэффективно с точки зрения производительности!).
Спасибо!
Решение
Обновление для 1.7 Azure SDK.Был представлен класс CloudConfigurationManager.Это позволяет одному вызову GetSetting сначала заглянуть в ваш cscfg, а затем вернуться к web.config, если ключ не найден.
http://msdn.microsoft.com/en-us/LIBRARY/jj157248
Версия SDK для версии 1.7 Простой ответ - нет.(Насколько я знаю)
Более интересной темой является рассмотрение конфигурации как зависимости.Я обнаружил, что было бы полезно рассматривать параметры конфигурации как зависимость, чтобы резервная реализация могла быть изменена с течением времени.Эта реализация может быть подделкой для тестирования или чем-то более сложным, например переключением с .конфигурация/.cscfg к реализации базы данных для многопользовательских решений.
Учитывая эту оболочку конфигурации, вы можете написать, что TryGetSetting как внутренний метод для любого вашего источника параметров конфигурации.Когда эта функция будет добавлена к участникам RoleEnvironment, вам нужно будет только изменить эту внутреннюю реализацию.