2011-01-04 17 views
3

spring xmlファイルの他の場所でdictionary(xml spring config)で定義された項目の使用方法がわかりません。このようなことを試みましたが、 "obj1"の初期化でエラーが発生しました。あなたの助けのためのSpring.Net辞書の項目への参照

<object name="Paths" id="Paths" type="System.Collections.Generic.Dictionary&lt;string,string&gt;"> 
    <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

エラーメッセージの詳細を投稿できますか? – Marijn

答えて

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は含まれています。代わりにapp.configの、あなたが他のIResourceを使用することができます

<!-- ... --> 
<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> 
<!-- ... --> 

注意を。

cfgFileを設定にオブジェクトとして定義してから、このオブジェクトをvalue-ref(この方法については、春のドキュメント5.3.2.4を参照)を使用して辞書で参照してください。しかし、これは(おそらく)あなたが探しているものではありません。なぜなら、あなたはプリミティブな値を注入しているからです(したがって、明示的にConfigurationObjectを作成する価値はありません)。

+0

それは私が探していたものですが、どちらのアプローチも私の目的にとって貴重です。 –

+0

ありがとう、マリリン。 –

関連する問題