2010-03-31 5 views
3

Я использую замок Виндзор для IoC, и имеют конфигурацию, имевшихся в web.config/app.config, используя следующий завод:Виндзорский замок и его собственный файл конфигурации

public static TYPE Factory(string component) 
    { 
     var windsorContainer = new WindsorContainer(new XmlInterpreter()); 
     var service = windsorContainer.Resolve<TYPE>(component); 

     if (service == null) 
      throw new ArgumentNullException(string.Format("Unable to find container {0}", component)); 

     return service; 
    } 

и мой web.config глядя, как это:

<configuration> 
    <configSections> 
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/> 
    </configSections> 
    <castle> 
    <components> 
     <component id="Data" service="Data.IData, Data" type="Data.DataService, Data"/> 
    </components> 
    </castle> 
    <appSettings>....... 

Что хорошо работает, но я хотел бы разместить конфигурацию для Castle Windsor в файле под названием castle.config. Как мне это сделать?

+0

Обратите внимание, что вы создаете новый контейнер каждый раз, вам нужно разрешить компонент. Мало того, что ** очень ** неэффективен, но вы также теряете такие функции, как управление стилем жизни. Вместо этого создайте один контейнер для каждого приложения. –

+2

Пожалуйста, скажите, что вы вызываете этот метод 'Factory' только один раз за время жизни вашего приложения ... –

+0

Он называется только частью конструктора службы WCF, так ли это? – Coppermill

ответ

4

WindsorContainer принимает имя файла конфигурации в качестве параметра строительства:

общественного WindsorContainer (строка XMLFILE)

Резюме: Инициализирует новый экземпляр класс Castle.Windsor.WindsorContainer используя xml-файл для настройки . Эквивалент к использованию нового WindsorContainer (новый XmlInterpreter (XMLFILE))

Ваш файл castle.config будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <components> ... 
Смежные вопросы