为什么IoC容器(例如Unity等)首先选择具有最多参数的构造函数?

时间:2013-09-25 04:53:39

标签: dependency-injection inversion-of-control ioc-container

首先使用较少的参数选择构造函数会有什么缺点?

最好的问候。

1 个答案:

答案 0 :(得分:1)

注入器尝试猜测要调用哪个构造函数,具体取决于参数类型信息(并不总是可用),类中的构造函数列表(包括继承的构造函数)以及它可以提供的可用参数。在某些框架中,显式提供了参数,并且注入器不需要解析构造函数,但情况并非总是如此。

我编写了一些简单的构造函数依赖注入代码。当多个构造函数是依赖注入的有效候选者时,它与正则表达式匹配非常相似:假设最长的字符串更具体,因此首先使用。

事实上,注入器假定具有更多参数的构造函数“包装”具有较少参数的构造函数:

MyClass(A,B){
   // does something with A and B
}

MyClass(A,B,C){
   // should call the previous one
   this(A,B);
   //then does something with C
}

这适用于任何类型的方法(不仅仅是构造函数)。