【发布时间】:2010-10-22 11:17:35
【问题描述】:
我需要将IList<IActivity> 类型的集合注入到构造函数中。我正在使用 Unity 2.0 并使用 XML 对其进行配置。
我可以通过在 Unity 1.2 中注入一个数组来做到这一点。我刚刚升级到 Unity 2.0,我的配置现在已经停止在这个特定区域工作。 (我已经解决了架构的所有琐碎更改。)
我的构造函数如下所示:
public DoSomethingWorkflow(IList<IActivity> activityCollection)
{
...
}
我的配置如下所示:
<alias alias="IListOfIActivity" type="System.Collections.Generic.IList`1[[MyProject.IActivity, MyProject]], mscorlib"/>
<alias alias="IActivityArray" type="MyProject.IActivity[], MyProject" />
<register type="IWorkflow" mapTo="Workflow" name="DoSomethingWorkflow">
<constructor>
<param name="activityCollection" type="IListOfIActivity">
<array>
<dependency name="DoSomethingActivity1"/>
<dependency name="DoSomethingActivity2"/>
</array>
</param>
</constructor>
</register>
如果我按上述方式运行配置,我会收到一条错误消息,提示“配置设置为注入数组,但类型 IList`1 不是数组类型”。
如果我将其更改为以前的工作方式(注入类型别名 IActivityArray),我会收到一条错误消息,指出“配置不正确,MyProject.Workflow 类型没有采用名为 activityCollection 的参数的构造函数”。
如果我从构造函数元素中完全删除 type 属性,我会收到与上面相同的错误消息。
我可以让它工作的唯一方法是将构造函数更改为接受 IActivity[] 数组。
那么这是 Unity 中的错误吗,因为数组是 IList 并且应该找到构造函数?还是我的配置中遗漏了什么?
【问题讨论】:
-
太好了,我刚刚为这个获得了 Tumbleweed 徽章!有人可以帮忙吗?
-
你有想过这个吗?
标签: unity-container