我在尝试使用自动生成的Web服务客户端时遇到了一个有趣的场景。这意味着我无法修改其他类构造函数。 它有2个构造函数,如下所示: -
public FooServicePortTypeClient(string endPointConfigurationName, string remoteAddress)
public FooServicePortTypeClient(string endPointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress)
注意参数名称“remoteAddress”是如何使用两次的,但是对于一个构造函数,它是一个字符串,另一个是EndpointAddress对象。
我试图通过具有内联依赖关系的windsor容器注册我的Web服务,方法是使用DependsOn传递服务客户端的参数: -
container.Register(Component.For<FooServicePortTypeClient>().DependsOn(Dependency.OnValue("endPointConfigurationName", "fooEndpointConfigname"), Dependency.Onvalue("remoteAddress", "fooRemoteAddress"))));
然后我注意到,windsor试图将remoteAddress的字符串与带有类型参数EndpointAddress的构造函数匹配(并因此失败),而不是选择字符串版本。
有没有办法实际能够区分2个“不同”的参数,以便我可以选择使用带字符串的那个或带有EndpointAddress的那个?
我发现我只能使用Dependency.OnValue指定参数名称,并且尝试键入的版本没有意义,因为构造函数中有2个字符串(endPointConfigurationName和remoteAddress),它们无法区分它们。
就个人而言,这是微不足道的,我绝对可以通过向它提供一个新的EndpointAddress对象来做Castle Windsor正在寻找的东西。 但是,我只是想知道Castle windsor如何决定使用Dependency.OnValue的构造函数版本,以及是否真的有办法让它更喜欢其中一个。当然,我认为对于像我这样没有经验的用户而言,这是一个陷阱,期望字符串版本能够正常工作。
答案 0 :(得分:0)
Dependency.OnValue
有一个重载,允许您提供类型:
Dependency.OnValue<System.ServiceModel.EndpointAddress>(endpointAddress)
这告诉Windsor解决“更高级别”类型(与string
或int
等基本类型相比)。有关详细信息,请参阅docs。