Раньше для этого я использовал выражение, но с помощью этого вопроса и ответа bbaia , Я обнаружил, что лучший способ сделать это - использовать VariablePlaceholderConfigurer
. Когда вы используете VariablePlaceholderConfigurer
вместо моего "выражения-хака", вы не привязываете себя к конфигурации стиля appSettings / connectionStrings
ваших переменных: вы можете переключиться на один из VariableSources
, предоставленных spring.net, или даже реализовать свой собственный IVariableSource
.
Spring.NET по умолчанию предоставляет VariablePlaceholderConfigurer
s для извлечения переменных из стандартных параметров .NET, таких как AppSettings
, ConnectionStrings
, UserSettings
и ApplicationSettings
. Это частично проиллюстрировано ответом bbaia, и вы найдете полный пример ниже.
"Expression hack": вызов ConfigurationManager
из конфигурации xml
Итак, я не советую вам использовать это, но это хак, который я использовал в прошлом, применительно к вашей конфигурации:
<object object name="myService" type="com.acme.MyService, com.acme">
<constructor-arg name="Connection"
expression="T(System.Configuration.ConfigurationManager).ConnectionStrings['myConnectionName']" />
</object>
Вы можете использовать тот же подход для ConfigurationManager.AppSettings
, например:
<object object name="myService" type="com.acme.MyService, com.acme">
<constructor-arg name="AnotherConstructorArgument"
expression="T(System.Configuration.ConfigurationManager).AppSettings['mySetting']" />
</object>
VariablePlaceholderConfigurer
: ссылка на настройки .NET из конфигурации Spring.NET xml
Вы можете легко настроить VariablePlaceholderConfigurer
для получения переменных из стандартных параметров .NET, таких как AppSettings
, ConnectionStrings
, UserSettings
и ApplicationSettings
. Например, рассмотрим эту конфигурацию xml:
<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net" >
<object type="Spring.Objects.Factory.Config.VariablePlaceholderConfigurer, Spring.Core">
<property name="VariableSources">
<list>
<object type="Spring.Objects.Factory.Config.ConnectionStringsVariableSource, Spring.Core" />
<object type="Spring.Objects.Factory.Config.ConfigSectionVariableSource, Spring.Core">
<!-- Sections to read, sepearated by comma (leave out spaces) -->
<property name="SectionNames"
value="appSettings,applicationSettings/q7991262.Properties.Settings,userSettings/q7991262.Properties.Settings" />
</object>
</list>
</property>
</object>
<!-- Note that you have to append '.connectionstring' to the key! -->
<object id="usingConnectionStringsVariableSource"
type="q7991262.MyService, q7991262">
<property name="Connection"
value="${myConnectionName.connectionString}" />
</object>
<object id="configSectionVariableSource"
type="q7991262.MyService, q7991262">
<property name="Connection"
value="${myConnectionNameAppSettings}" />
</object>
<object id="userSettingsSection"
type="q7991262.MyService, q7991262">
<property name="Connection"
value="${myConectionNameUserSetting}" />
</object>
<object id="applicationSetting"
type="q7991262.MyService, q7991262">
<property name="Connection"
value="${myConectionNameApplicationSetting}" />
</object>
</objects>
Он читает настройки из этого app.config
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="q7991262.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="q7991262.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="myConnectionName"
connectionString="From connection string section."/>
</connectionStrings>
<appSettings>
<add key="myConnectionNameAppSettings"
value="From app setting section." />
</appSettings>
<userSettings>
<q7991262.Properties.Settings>
<setting name="myConectionNameUserSetting" serializeAs="String">
<value>My connection from user settings.</value>
</setting>
</q7991262.Properties.Settings>
</userSettings>
<applicationSettings>
<q7991262.Properties.Settings>
<setting name="myConectionNameApplicationSetting" serializeAs="String">
<value>My connection from application settings.</value>
</setting>
</q7991262.Properties.Settings>
</applicationSettings>
</configuration>
Эти конфигурации взяты из этого рабочего образца на github.
person
Marijn
schedule
03.11.2011