我无法找到如何在spring xml文件中的其他位置使用字典(xml spring config)中定义的项目。我尝试过类似的东西,但是我在init“obj1”中遇到错误。
<object name="Paths" id="Paths" type="System.Collections.Generic.Dictionary<string,string>">
<constructor-arg>
<dictionary key-type="string" value-type="string">
<entry key="cfgFile">
<value>config.txt</value>
</entry>
</dictionary>
</constructor-arg>
</object>
<object name="obj1" type="MyTestClass" depends-on="Paths">
<property name="cfg" expression="${Paths['cfgFile']}"/>
</object>
感谢您的帮助......
答案 0 :(得分:2)
我的原始答案被接受,但现在我相信更好的答案是:
你的表达不正确,应该是:
<object name="obj1" type="MyTestClass" depends-on="Paths">
<property name="cfg" expression="@(Paths)['cfgFile']"/>
</object>
您可以使用@(object-id-here)
expression syntax to retrieve an object from the Spring context using an expression。
编辑 - 以下是接受的答案
我可以想象您希望app.config
中提供此类配置。如果是这样,您可以使用PropertyPlaceholderConfigurer
;请参阅section 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 docs 5.3.2.4) 。但是这(可能)并不是你想要的,因为你注入了原始值(因此创建一个明确的ConfigurationObject
并不值得。)