Em muitos artigos em toda a web, os termos Princípio de Inversão de Controle e Inversão de Dependência parecem misturados e usados como sinônimos (mais confusão é imposta pelas ferramentas chamadas "DI-Containers" e "IoC-Containers"). Um artigo da Wikipedia faz um bom trabalho tentando explicar que IoC não é o mesmo que DI:
inversão de controle (IoC) descreve um design no qual partes escritas sob encomenda de um programa de computador recebem o fluxo de controle de uma biblioteca genérica e reutilizável
Portanto, o DIP é sobre ter seus módulos dependentes de abstrações, em vez de implementações concretas.
E a IoC trata de dar controle sobre o fluxo do programa a um módulo separado. E uma das coisas que você pode fazer com que este módulo faça é resolver as dependências no tempo de execução.
Essa diferença parece justa, mas nunca vi alguém mencionar outras aplicações do princípio da IoC além da resolução de dependência. A definição da Wikipedia é bastante ampla e parece que você poderia fazer muito mais com um módulo que pode fazer chamadas para seu código personalizado com base em sua configuração e em alguma lógica interna.
Então, aqui estão algumas perguntas que ainda não consigo entender:
- Qual é a relação real entre IoC e DIP? A IoC sempre serve como meio de implementar o DIP?
- Por que as ferramentas para resolução de dependência são chamadas de contêineres DI e IoC? Isso implica que DI e IoC são a mesma coisa.
Nota : Esta pergunta não é uma duplicata de Qual é a diferença entre DI e IoC , porque a última pergunta sobre Injeção de Dependência, não Inversão de Dependência.