Windsorを使用してアプリの設定を挿入する
-
05-07-2019 - |
質問
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を変更するだけです。