Вставить настройки приложения с помощью Windsor - PullRequest
13 голосов
/ 29 октября 2008

Как я могу ввести значение записи appSettings (из app.config или web.config) в сервис, использующий контейнер Windsor? Если бы я хотел ввести значение свойства 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>

РЕДАКТИРОВАТЬ: Чтобы уточнить; Я понимаю, что это не возможно изначально с Виндзором и статья Дэвида Хейдена , к которой относится sliderhouserules , фактически касается его собственного контейнера IoC (Дэвида Хейдена), а не Виндзора.

Я, конечно, не первый, у кого возникла эта проблема, поэтому я хотел бы знать, как другие люди решили эту проблему?

Ответы [ 2 ]

6 голосов
/ 17 апреля 2010

Я придумала решение для этого в конце концов, основываясь на подсказках из различных источников в Интернете. Конечный результат, хотя и в значительной степени включал в себя копирование трех классов из дословно Виндзора и их небольшую модификацию. Конечный результат на кодплексе для вашего удовольствия.

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>

В решении есть рабочий пример.

2 голосов
/ 12 ноября 2008

Я написал пост о похожем случае пару месяцев назад. Он использует SubDependencyResolver, чтобы ввести соответствующие параметры. В вашем случае вы можете просто изменить DynamicConfigurationSettings для ConfigurationManager.

...