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

Sco*_*ger 29 c# unity-container

我一直在使用Microsoft的Unity IOC容器.RegisterType()所有类似的方法都有一堆重载

IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers);
Run Code Online (Sandbox Code Playgroud)

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

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

Jeh*_*hof 28

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

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

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

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

以下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>
Run Code Online (Sandbox Code Playgroud)