É um padrão comum entre frameworks que tem o objetivo de fazer a amarração entre os componentes de uma aplicação.
Era um problema comum, amarrar diferentes elementos da aplicação, sendo que foram criados por pessoas diferentes, com pouco conhecimento entre si. A partir daí, vários frameworks apareceram para tentar resolver este problema, e muitos deles se expandiram para prover capacidade de amarrar componentes de diferentes camadas. Estes são chamados containers leves, e têm como exemplo o PicoContainer e o Spring.
Inversão de controle é um termo mais amplo, assim, foi estabelecida uma especificação para o padrão que foi chamada de injeção de dependências. A idéia básica da injeção de dependências é ter um objeto separado, que popula um campo em um objeto com uma implementação apropriada para a interface criada.
Existem três tipos principais de injeção de dependências:
* Injeção por Construtores;
* Injeção por Métodos Set;
* Injeção por Interfaces.
Assista o vídeo no vimeo, acompanhe os slides no slideshare.