Unity - фабрика через XML - PullRequest
       23

Unity - фабрика через XML

4 голосов
/ 30 марта 2012

Я использую инфраструктуру Unity в качестве контейнера IoC.

Мой Config выглядит примерно так:

<unity>
  <container>
    <register type="Namespace1.IFoo, FooAsm"
              mapTo="Namespace2.Bar, BarAsm">
    </register>
</conainer>

Я хотел бы зарегистрировать контейнер для использованиязаводской метод.Как мне добиться этого с помощью app.config?

Я ищу что-то вроде этого:

<unity>
  <container>
    <register type="Namespace1.IFoo, FooAsm"
              factory="Namespace2.Bar, BarAsm"
              method="create">
    </register>
  </conainer>
</unity>

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Этот поток предлагает хороший ответ о том, как добавить поддержку фабричных методов для Unity.Фактически вам нужно загрузить этот источник битового набора (и изменить ссылки на фреймворк 4.0).
Если вы добавите Универсальную поддержку Unity , вы получите довольно удивительное решение,выглядеть следующим образом:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity xmlns="schemas.microsoft.com/practices/2010/unity">
    <sectionExtension type="Unity.FactoryConfig.FactoryConfigExtension, Unity.FactoryConfig"/>
    <alias alias="Factory" type="Namespace1.GenericFactory`1, asm1"/>
    <container>
      <register type="Namespace1.ITest, asm1">
        <factory type="Factory[[Namespace1.ITest, asm1]]" method="Create" />
      </register>
    </container>
  </unity>
</configuration>

Поддержка универсальных фабрик для единства фреймворка с использованием конфигурации xml!
Спасибо за все комментарии:)

1 голос
/ 30 марта 2012

Я не думаю, что есть встроенный способ сделать это в настоящее время. Я обычно просто регистрирую саму фабрику (Map IMyFactory -to-> MyFactoryImpl), затем внедряю фабрику в классы, которые в ней нуждаются, и классы вызывают фабрику.

Тем не менее, я думаю, что вы, вероятно, можете заставить что-то называть фабрикой прямо из Unity, сделав расширение для Unity. В ответах на этот вопрос упоминается пара: Как создавать объекты с использованием статического метода фабрики?

...