在一个类有多个构造函数的场景中,我知道 Castle Windsor 有一种算法用于检测“最贪婪”的构造函数并选择那个来解析组件。
但是,如果构造函数与 config.xml 中指定的参数名称和类型不匹配,为什么要选择它开始呢?
例如,假设以下配置:
<configuration>
<component id="MyComponent" type="MyType" service="IMyInterface">
<parameters>
<firstParam>${firstComponent}</firstParam>
<secondParam>${secondComponent}</secondParam>
<thirdParam>${thirdComponent}</thirdParam>
</parameters>
</component>
<component id="MyOtherComponent" type="MyType" service="IMyInterface">
<parameters>
<firstParam>${firstComponent}</firstParam>
<secondParam>${secondComponent}</secondParam>
<forthParam>${forthComponent}</forthParam>
</parameters>
</component>
和 MyType 类:
public class MyType : IMyInterface {
public MyType(IFirstComponent firstParam, ISecondComponent secondParam, IThirdComponent thirdParam){
// do stuff
}
public MyType(IFirstComponent firstParam, ISecondComponent secondParam, IForthComponent forthParam){
// do other stuff
}
}
我期望容器做的是调用 MyComponent 的第一个构造函数和 MyOtherComponent 的第二个构造函数。相反,两个组件都调用了第二个构造函数。
为什么 Castle 调用的构造函数显然与我在 config 中指定的参数名称(和类型)不匹配?