RegisterType()调用中的InjectionMembers是什么?

时间:2009-10-11 06:22:14

标签: c# unity-container

我一直在使用Microsoft的Unity IOC容器。 RegisterType()方法有一堆重载,看起来与

相似
IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers);

我想知道injectionMembers参数的用途是什么时候?我找不到任何关于它们的文档(即使它们在每次重载时都没有),我看过的示例代码都没有使用它们。

我在这里遗漏了什么吗?它们不常用或者我只是错过了这些例子吗?

2 个答案:

答案 0 :(得分:27)

当您没有提供Unity告诉如何创建给定类型的实例的配置文件,或者您想要通过除了在中定义的方式之外的其他方式创建实例时,使用InjectionMember数组的重载配置文件。

如果要在没有配置文件的情况下配置统一容器,则使用重载。 InjectionMember可以是构造函数,属性或方法调用。

以下代码摘自Unity帮助,展示了如何通过容器的流畅界面使用InjectionMembers

IUnityContainer myContainer = new UnityContainer();
myContainer.Configure<InjectedMembers>()
  .ConfigureInjectionFor<MyObject>( 
    new InjectionConstructor(12, "Hello Unity!"), 
    new InjectionProperty("MyStringProperty", "SomeText"));

以下XML配置等同于上面的代码。

<type type="MyObject" mapTo="MyObject" name="MyObject">
  <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <constructor> 
      <param name="someInt" parameterType="int"> 
        <value value="12"/>
      </param> 
      <param name="someText" parameterType="string">
        <value value="Hello Unity!"/>
      </param> 
    </constructor> 
    <property name="MyStringProperty" propertyType="string">
      <value value="SomeText"/>
    </property>
  </typeConfig> 
</type>

答案 1 :(得分:0)

另请注意,尽管它们出现在每次重载中,但它们并不是必需的。

我认为这是有效的,因为InjectionMemeber是一个数组类型并且是最后一个参数,所以你可以有零个或多个逗号分隔值,并且数组会自动神奇地组合......