質問

Windsorコンテナを使用して、appSettingsエントリの値(app.configまたはweb.configから)をサービスに挿入するにはどうすればよいですか? Windsorプロパティの値をサービスに注入したい場合、次のようにします。

<properties>
    <importantIntegerProperty>666</importantIntegerProperty>
</properties>
<component
    id="myComponent"
    service="MyApp.IService, MyApp"
    type="MyApp.Service, MyApp"
    >
    <parameters>
        <importantInteger>#{importantIntegerProperty}</importantInteger>
    </parameters>
</component>

しかし、私が本当にやりたいのは、次のように定義されるアプリ設定変数から#{importantIntegerProperty} で表される値を取得することです。

<appSettings>
    <add key="importantInteger" value="666"/>
</appSettings>

編集:明確にするため。 Windsorおよび David Haydenでは、これがネイティブに不可能であることを認識しています。 sliderhouserules が参照している記事は、実際にはウィンザーではなく、彼自身の(David Haydenの)IoCコンテナーに関するものです。

私は確かにこの問題を抱えている最初の人ではないので、他の人がこの問題をどのように解決したかを知りたいですか?

役に立ちましたか?

解決

最終的には、Web上のさまざまなソースからのヒントに基づいて、これに対する解決策を思い付きました。最終結果は、Windsorから3つのクラスを逐語的にコピーし、少し変更するだけでした。最終的な結果は、楽しみのためにコードプレックスに表示されます。

http://windsorappcfgprops.codeplex.com/

このコードはかなり前に最初に書いたので、Windsor 1.0.3に基づいています-はい、結果を公開するまでにそれ時間がかかりました!

コードを使用すると、app.config(または明らかにweb.config)にこれを含めることができます:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="theAnswer" value="42"/>
  </appSettings>
</configuration>

... Windsor XML構成ファイルから次のようにアクセスします:

<?xml version="1.0" encoding="utf-8" ?>
<castle>
  <components>
    <component
      id="answerProvider"
      service="Acme.IAnswerProvider, Acme"
      type="Acme.AnswerProvider, Acme"
      >
      <parameters>
        <theAnswer>#{AppSetting.theAnswer}</theAnswer>
      </parameters>
    </component>
  </components>
</castle>

ソリューションには実用的な例があります。

他のヒント

I 同様のケースに関する投稿数ヶ月前。 SubDependencyResolverを使用して、適切なパラメーターを注入します。あなたの場合、ConfigurationManagerのDynamicConfigurationSettingsを変更するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top