13

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

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

編集:明確にするために。これはウィンザーでは本来不可能であり、スライダーハウスルールが参照しているデビッド・ヘイデンの記事は、ウィンザーではなく、実際には彼自身の (デビッド・ヘイデンの) IoC コンテナーに関するものです。

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

4

2 に答える 2

6

最終的に、Web 上のさまざまな情報源からのヒントに基づいて、これに対する解決策を思いつきました。ただし、最終的には、Windsor から 3 つのクラスをそのままコピーし、それらを少しだけ変更する必要がありました。最終結果は、あなたの楽しみのために codeplex にアップされています。

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>

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

于 2010-04-17T17:15:23.840 に答える
2

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

于 2008-11-12T13:05:51.057 に答える