Можно ли сделать так, чтобы некоторые свойства объектов из контейнера Spring.NET приняли значение переменной среды Windows?
Контейнер Spring.NET и переменные среды (environment variable)
3
Спросил
Новые ответы
3
В конфигуровочных файлах Spring.NET можно использовать плейсхолдеры, которые во время инициализации будут заменены значениями из конфигуровочного файла. Например, в App.config/Web.config указанно:
<appSettings>
<add key="SomeProperty" value="10"/>
</appSettings>
Далее, в Objects.xml нужно создать объект, который будет заменять плейсхолдеры реальными значениями:
<object name="appConfigPropertyHolder" type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="IgnoreUnresolvablePlaceholders" value="true" />
<property name="configSections">
<value>appSettings</value>
</property>
</object>
Теперь в любом месте XML конфигурации можно использовать placeholder ${SomeProperty}
. Более того, у объекта PropertyPlaceholderConfigurer
есть свойство EnvironmentVariableMode
, с помощью которого можно указать, какие действия предпринимать если есть переменная среды с именем аналогичным плейсхолдеру. Возможные значения:
Fallback
— значения из .config файла перекрывают значения переменных среды;Never
— переменные среды игнорируются;Override
- переменные среды перекрывают значения из .config-файла.
Итак, для замены всех свойств переменными среды нужно приведенный выше код заменить на следующий:
<object name="appConfigPropertyHolder" type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="IgnoreUnresolvablePlaceholders" value="true" />
<property name="EnvironmentVariableMode" value="Override" />
<property name="configSections">
<value>appSettings</value>
</property>
</object>