【问题标题】:Spring.NET - constructor-args of IList<Interface>Spring.NET - IList<Interface> 的构造函数参数
【发布时间】:2010-08-01 03:23:24
【问题描述】:

我正在尝试将 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>

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

任何帮助表示赞赏。谢谢

【问题讨论】:

  • 您的 xml 配置的这一部分没有任何问题,所以这应该可以工作(而且绝对是可能的)。可能你在其他地方犯了错误。您可以为business.IGetAccount_A 和business.IGetAccount_B 添加xml 定义吗?这些对象是否都实现了接口business.IGetAccount?
  • 您确定显示的错误消息与您从应用程序收到的错误消息完全相同吗?
  • 我精简了所有内容(删除了更多的构造函数参数)并缩短了名称。将添加其余配置...
  • 用一个简单的例子更新了问题。是的,两个对象都实现了 IGetAccount 接口

标签: spring.net


【解决方案1】:

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

如果对象DataLayer.DataServices.IDataService 和对象DataLayer.DataServices.IGetAccountMessageDataLayer.DataServices.IGetAccountDatabase 是同一个xml 文件的一部分,您还可以使用idreflocal 属性。然后在解析 xml 文件时会出现错误,甚至在解析依赖项之前。

【讨论】:

  • 非常感谢我已经完成了这项工作,您为我指明了正确的方向。基本上,idref 元素似乎将对象的名称作为字符串传递,而 ref 元素传递对象,因此我得到了错误。在查看 idref 元素和本地属性时,我遇到了这篇文章...stackoverflow.com/questions/269845/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多