有没有办法在 Unity 的 XML 配置中注册工厂?



有没有办法在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指定工厂方法非常容易,但我想您已经意识到了这一点。

最新更新