Вторая форма представляет то, что Вы делаете более точно. В Вашем примере Вы не заботитесь о значении меня, действительно - все, что Вы хотите, следующий элемент в итераторе.
Все доступные конструкторы моделируются как кандидаты, и, по сути, между ними проводится конкурс.
Каждый параметр в конструкторе представляет зависимость, которая может быть удовлетворена или нет. Для каждого кандидата в конструкторы анализируются все зависимости.
Если зависимость может быть удовлетворена, это два балла для кандидата. Если он не может быть удовлетворен, с кандидата вычитаются два балла.
Кандидат в конструктор с наибольшим количеством очков выигрывает и выбирается для создания экземпляра компонента.
Код этого алгоритма здесь .