我一直在使用Microsoft的Unity IOC容器。 RegisterType()
方法有一堆重载,看起来与
IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers);
我想知道injectionMembers
参数的用途是什么时候?我找不到任何关于它们的文档(即使它们在每次重载时都没有),我看过的示例代码都没有使用它们。
我在这里遗漏了什么吗?它们不常用或者我只是错过了这些例子吗?
答案 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是一个数组类型并且是最后一个参数,所以你可以有零个或多个逗号分隔值,并且数组会自动神奇地组合......