我使用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>
有什么建议吗?
答案 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?