Unity - 通过XML工厂

时间:2012-03-30 12:44:32

标签: c# .net dependency-injection inversion-of-control unity-container

我使用Unity框架作为IoC容器。

我的配置看起来像这样:

<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 个答案:

答案 0 :(得分:4)

This thread提供了关于如何为Unity添加Factory方法支持的很好的响应。事实上,您必须下载this bitbucket源(并将引用更改为4.0框架) 如果您现在添加Generic support for 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 :(得分:1)

我认为目前没有内置方法可以做到这一点。我通常只注册工厂本身(Map IMyFactory -to-&gt; MyFactoryImpl)然后将工厂注入需要它的类中,并让类调用工厂。

但是,我认为您可以通过为Unity扩展来直接从Unity调用工厂。在这个问题的答案中提到了几个:How to create objects using a static factory method?