Замок Виндзор: как не загружать все компоненты в конфигурации замка Виндзор xml при вызове «Resolve» - PullRequest
1 голос
/ 04 марта 2010

Я хотел бы использовать «шаблон стратегии» с 2 веб-проектами, мой файл конфигурации (и только с файлом конфигурации):

<?xml version="1.0"?>
<configuration>
    <components>
      <!-- container ORM -->
      <component id="DALReseauContainer"  type="ReseauRules.Db.BLL.DbReseauWorkingContextContainer, ReseauRules"                       service="ReseauConnector.BLL.IReseauWorkingContextContainer, ReseauConnector">        
      </component>

      <!-- remote controler (Web Service) -->
      <component id="remoteReseauManager"
                 type="ReseauConnector.BLL.RemoteReseauManager, ReseauConnector"
                 service="ReseauConnector.BLL.IReseauManager, ReseauConnector"
                 lifestyle="transient">        
      </component>

      <!-- local controler  -->
      <component id="localReseauManager"
                 type="ReseauRules.Db.BLL.DbReseauManager, ReseauRules"
                 service="ReseauConnector.BLL.IReseauManager, ReseauConnector"
                 lifestyle="transient">
        <parameters>
          <container>${DALReseauContainer}</container>
        </parameters>
      </component>
    </components>
</configuration>

проект A использует «remoteReseauManager» и ссылается только на ReseauConnector, может вызывать

container.Resolve<IReseauManager>("remoteReseauManager");

проект B использует "localReseauManager" и ссылается на ReseauConnector AND ReseauRules, может вызывать

container.Resolve<IReseauManager>("localReseauManager");

когда я звоню

IWindsorContainer container = new WindsorContainer(new Castle.Windsor.Configuration.Interpreters.XmlInterpreter()); 

Windsor пытается разрешить все компоненты, и, как и в проекте A, ReseauRules не существует, Windsor не может загрузить ReseauRules (как и ожидалось).

Как сказать, чтобы Windsor не загружал компонент в этом контексте (файл конфигурации)?

Большое спасибо.

1 Ответ

1 голос
/ 04 марта 2010

Предполагается, что у вас будет один контейнер на приложение , поэтому в этом случае также имеет смысл иметь конфигурацию Windsor для приложения. Очевидно, что эти два приложения имеют разные требования к зависимости.

Каждое приложение уже должно иметь свой собственный файл web.config, поэтому в каждом из них должны быть отдельные конфигурации Windsor.

Если ремонтопригодность является проблемой, XML не является решением в любом случае. Если у вас много общей конфигурации контейнера, напишите реализацию IWindsorInstaller и оставьте только те части конфигураций, которые отличаются в XML.

Вы можете смешивать конфигурацию XML и конфигурацию как код .

...