如何使用 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/

10-16 18:55