Spring.NET - IList <interface> </interface>的constructor-args

时间:2010-07-30 10:09:25

标签: spring.net

我正在尝试将一个IList注入一个构造函数,并想知道这是否可行,如果是这样,有人可以启发我吗?它要求类型转换器的事实让我觉得我不能这样做。

我试过......

<object name="DataLayer.DataServices.IGetAccountDatabase" type="DataServices.LinqToEntities.EntityDataModel, DataServices.LinqToEntities" singleton="false"></object>
<object name="DataLayer.DataServices.IGetAccountMessage" type="DataServices.VMX.VmxModel, DataServices.VMX" singleton="false"></object>

<object name="DataLayer.DataServices.IDataService" type="DataServices.NavigationModel, DataServices" singleton="false">
    <constructor-arg>
        <list element-type="DataLayer.DataServices.IGetAccount, DataLayer" >
          <idref object="DataLayer.DataServices.IGetAccountMessage"/>
          <idref object="DataLayer.DataServices.IGetAccountDatabase"/>
        </list>
    </constructor-arg>
</object>

在'file [D:\ Workspace \ DataServices \ Main \ Source \ DataServices \ TestResults \ 2010-07-30 11_58_31 \ Out \ Spring.xml]'中定义名称为'DataLayer.DataServices.IDataService'的对象时出错:对象初始化失败:在对象'DataLayer.DataServices.IDataService'的属性'constructor argument'初始化期间,无法将托管列表元素'DataLayer.DataServices.IGetAccountMessage'从[System.String]转换为[DataLayer.DataServices.IGetAccount]。您是否注册了适当的类型转换器?

任何帮助表示赞赏。 thnx

1 个答案:

答案 0 :(得分:1)

我认为如果您使用id而不是name指定对象,它应该有效(通常使用id更好)。 idref element只能用于通过id引用对象。

如果对象DataLayer.DataServices.IDataService以及对象DataLayer.DataServices.IGetAccountMessageDataLayer.DataServices.IGetAccountDatabase属于同一个xml文件,您还可以使用local idref属性。然后,在解析xml文件时会出现错误,即使在解析依赖关系之前也是如此。