Мой первоначальный ответ был принят, но теперь я думаю, что лучший ответ будет:
Ваше выражение не верно, оно должно быть:
<object name="obj1" type="MyTestClass" depends-on="Paths">
<property name="cfg" expression="@(Paths)['cfgFile']"/>
</object>
Вы можете использовать синтаксис выражения @(object-id-here)
для извлечения объекта из контекста Spring, используя выражение .
Редактировать - ниже приведен ответ, который был принят
Я могу представить, что вы хотели бы, чтобы такая конфигурация была доступна в вашем app.config
. Если это так, вы можете использовать PropertyPlaceholderConfigurer
; см. пример в раздел 5.9.2.1 .
В вашем случае это будет выглядеть примерно так:
<!-- app.config -->
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
</sectionGroup>
<section name="PathConfiguration" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<PathConfiguration>
<add key="cfgFile" value="config.txt"/>
<add key="otherCfgFile" value="otherconfig.txt"/>
</PathConfiguration>
<spring>
<context>
<resource uri="mycongfig.xml"/>
</context>
</spring>
</configuration>
А ваш myconfig.xml
содержит:
<!-- ... -->
<object name="obj1" type="MyTestClass">
<property name="cfg" value="${cfgFile}"/>
</object>
<object name="appConfigPropertyHolder"
type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="configSections">
<value>PathConfiguration</value>
</property>
</object>
<!-- ... -->
Обратите внимание, что вместо app.config
вы можете использовать любой другой IResource
.
Альтернативное решение состоит в том, чтобы определить cfgFile
как объект в вашей конфигурации, а затем в вашем словаре сослаться на этот объект, используя value-ref
(см. Документацию по Spring 5.3.2.4 , как это сделать) , Но это (вероятно) не то, что вы ищете, поскольку вы вводите примитивные значения (поэтому не стоит усилий по созданию явного ConfigurationObject
).