Se você olhar para suas três definições, a distinção é sutil, mas elas essencialmente significam a mesma coisa.
O que tudo isso significa é fornecer o que a classe precisa (suas dependências) através de parâmetros em seu construtor. Isso é tudo. Existem inúmeras estruturas de injeção de dependência que procuram formalizar esse processo, mas todas elas equivalem à mesma coisa.
A Injeção de Dependência sempre procura fornecer apenas as dependências necessárias, quando elas são necessárias.