Типизированные значения / переменные конфигурации в .NET - PullRequest
2 голосов
/ 16 февраля 2010

У нас есть много файлов конфигурации, используемых в нашем приложении. По крайней мере 100 различных XML-файлов для каждого клиента, содержащие не менее 50-80 пар имя / значение конфигурации, и все они часто меняются (по крайней мере, каждый месяц).

Файл конфигурации выглядит примерно так, как показано ниже,

  <property id="url"  value="s123"/>
  <property id="input-element-name"  value="name" />
  <property id="input-element-xpath" value="//body;//form;//table[3];" />

В настоящее время для чтения этих значений из xml-файла мы используем XmlReader и др. И сохраняем его в кеше, как только приложение запускается (а это может быть огромным завтра, когда наша клиентская база увеличится). Чтобы получить доступ к идентификаторам свойств, мы создали переменные const в статическом классе, чтобы избежать опечаток и т. Д.,

Этот подход был великолепен, когда у нас было меньше конфигураций. Теперь трудно поддерживать и добавлять все новое в этот файл конфигурации. Необходимость перестройки и т. Д., Просто убивает концепцию сохранения настраиваемых значений вне кода.

Мне было просто интересно, если бы какие-либо недавние разработки в .NET-пространстве, такие как язык M, IronPython мог помочь здесь иметь динамически типизированные и скомпилированные значения конфигурации по требованию, когда файл конфигурации изменяется. У нас нет никаких ограничений в том, что у нас есть формат xml для конфигурации.

Таким образом, мне нужно иметь некоторые файлы .XXX, имеющие наши значения конфигурации, и, если что-то изменяется или добавляется, это должно автоматически компилироваться и использоваться в нашем приложении без создания констант и т. Д., Я знаю, что происходит нечто подобное с файлами .T в VS.

Я надеюсь, что это может быть выполнимо ..

UPDATE

Идея этого вопроса, похоже, не была правильно понята, иначе я бы не правильно изложил. Извините за беспокойство.

Пользовательский раздел конфигурации может не подходить для этой проблемы, причина использования ConfigurationSection требует модификации кода, если я добавлю новую пару имя / значение. Однако этот подход будет работать, если только изменить значения, так как часть имени сопоставляется со свойством в коде.

Мне было интересно, если я использую какие-либо динамические языковые породы, такие как IronPython или M Language, я смогу переместить весь XML в него, и в моем приложении я смог бы увидеть любые изменения в этом файле (используя `FileSystemWatcher ') и выполните его, чтобы прочитать вновь добавленные пары имя / значение конфигурации.

Ответы [ 4 ]

1 голос
/ 16 февраля 2010

Вади, целью внешней конфигурации является устранение необходимости перекомпиляции для изменений конфигурации.

Если представленный вами xml представляет тип информации, которую вам нужно использовать, пользовательский ConfigurationSection будет вам полезен и обеспечит безопасность типа, которую вы хотите.

1 голос
/ 16 февраля 2010

Вы можете реализовать столько пользовательских ConfigurationSections , сколько захотите.

Это позволит вам моделировать вашу конфигурационную модель как строго типизированные объекты.

1 голос
/ 16 февраля 2010

Я использовал этот типизированный класс конфигурации от Рика Страля - он работал очень хорошо для меня.

0 голосов
/ 16 февраля 2010

Пожалуйста, посмотрите на классы в пространстве имен System.Configuration.Они были там с .NET 2.0 и предоставляют вам строго типизированный доступ к файлам конфигурации XML с проверкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...