This is where the type alone is not enough to indicate which dependency should be put one or more constructor args. The following component has a need for two of the same type, with some subtly different characteristics.

public class AppleProcessor {
  private Apple dessertApple;
  private Apple cookingApple;

  public inject(Apple dessertApple, Apple cookingApple) {
    this.dessertApple = dessertApple;
    this.cookingApple = cookingApple;
  }
  // other methods
}

pico.addComponent("dessertApple", GoldenDeliciousApple.class);
pico.addComponent("cookingApple", BramleyApple.class);
pico.as(Characteristics.USE_NAMES).addComponent(AppleProcessor.class);

AppleProcessor appleProcessor = pico.getComponent(AppleProcessor.class);

In this case the constructor to AppleProcessor has carefully named parameters - 'dessertApple' and 'cookingApple'. This is picked up on for the two named components GoldenDeliciousApple and BramleyApple also set up in the container.

There are two ways for this to work: