如何使用 Windsor 容器将 appSettings 条目(来自 app.config 或 web.config)的值注入(inject)到服务中?如果我想将 Windsor 属性的值注入(inject)到服务中,我会这样做:
<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 article 所指的 sliderhouserules 实际上是关于他自己的(David Hayden 的)IoC 容器,而不是 Windsor。
我肯定不是第一个遇到这个问题的人,所以我想知道其他人是如何解决这个问题的?
最佳答案
我最终根据网络上各种来源的提示提出了一个解决方案。最终的结果几乎涉及从 Windsor 逐字复制三个类并稍微修改它们。最终结果取决于 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>
解决方案中有一个工作示例。
关于caSTLe-windsor - 使用 Windsor 注入(inject)应用程序设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/244935/