如何在Spring.Net中实例化具有许多具有相同数量参数的构造函数的类型

时间:2016-09-28 07:13:54

标签: c# spring spring.net

我想用Spring.Net实例化System.Net.IPEndPoint。 这是我的xml代码:

<object id="MulticastAddress" type="System.Net.IPAddress" factory-method="Parse">
  <constructor-arg value="239.239.239.1"/>
</object>
<object id="DestinationEndPoint" type="System.Net.IPEndPoint">
  <constructor-arg name="address" ref="MulticastAddress"/>
  <constructor-arg name="port" value="2010"/>
</object>

但是这会导致Spring.Core.TypeMismatchException附加信息:无法将[System.Net.IPAddress]类型的属性值转换为属性&#39;&#39;所需类型[System.Int64]。

IPEndPoint有两个构造函数:

public IPEndPoint(long address, int port);
public IPEndPoint(IPAddress address, int port);

看来spring使用的第一个构造函数实际上是一个坏主意。

那么我怎么能告诉spring它应该使用第二个构造函数呢?

更新:

我想出了如何将IPAddress转换为long:

<object id="DestinationEndPoint" type="System.Net.IPEndPoint">
  <constructor-arg name="address" expression="T(System.Net.IPAddress).Parse('239.239.239.1')"/>
  <constructor-arg name="port" value="2010"/>
</object>

但现在我得到了例外:无法将[System.Int64]类型的属性值转换为属性&#39;&#39;所需类型[System.Net.IPAddress]。

现在看来Spring使用其他构造函数。它是什么!?

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案。如果构造函数不适合传递的参数,Spring.Net会抛出此异常。但Spring.Net稍后会捕获此异常并尝试下一个构造函数。所以我的问题是我必须告诉VisualStudio它不应该被这个异常打破-_-。