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

is there a way to register a factory in Unity's XML configuration?

有没有办法在 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>

非常感谢!

Is there a way to register a factory in Unity's XML configuration?

简短的回答是否定的。在 Enterprise Library 用户语音中有一个建议improve XML configuration,其中包含工厂方法,但尚未实现。

但是,Stack Overflow 用户 Chris Tavares has created a Unity extension on Bitbucket 在 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)

您的签名不同,但基于此扩展,您可以编写自己的签名来实现您需要的规则。

或者,在 运行 时使用流利的 API 指定工厂方法非常容易,但我想您已经意识到了这一点。