在一个类有多个构造函数的场景中,我理解Castle Windsor有一个用于检测“最贪婪”的算法。构造函数并选择一个来解析组件。
但是,如果构造函数与config中指定的参数名称和类型不匹配,为什么会选择构造函数。
例如,假设以下配置:
<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中指定的参数名称(和类型)不匹配的构造函数?