有没有办法在Unity的XML配置中注册工厂?Unity应该注入一些构造函数参数并使用工厂来实例化对象。
下面是一个基于Spring.NET的示例:
<object id="name" type="Namespace.Factory, Assembly" factory-method="Create">
<constructor-arg name="intParam" value="1" />
<constructor-arg name="objParam" ref="objectName" />
</object>
非常感谢!
有没有一种方法可以在Unity的XML配置中注册工厂?
简短的回答是否定的。在企业库用户的声音中,有一个改进XML配置的建议,其中包括工厂方法,但尚未实现。
然而,Stack Overflow用户Chris Tavares在Bitbucket上创建了一个Unity扩展,并在XML配置中支持工厂方法。
要使用此扩展,您将使用以下行的XML配置(其中FactoryCreated
是工厂创建的类型):
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<sectionExtension type="Unity.FactoryConfig.FactoryConfigExtension, Unity.FactoryConfig"/>
<alias alias="Factory" type="Namespace.Factory, Assembly"/>
<container>
<register type="NameSpace.FactoryCreated, Assembly">
<factory type="Factory" method="Create"/>
</register>
</container>
</unity>
不幸的是,这个扩展只支持三种类型的静态工厂方法签名:
Create()
Create(IUnityContainer container)
Create(IUnityContainer container, Type type, String name)
您的签名不同,但基于此扩展,您可以编写自己的签名来实现所需的规则。
或者,在运行时使用fluent API指定工厂方法非常容易,但我想您已经意识到了这一点。