A injeção de dependência é uma maneira de implementar a inversão de controle (IOC), que é um princípio de design que afirma que uma camada de abstração deve ser usada para lidar com dependências de aplicativos. Em outras palavras, em vez de Classe A Classe B, a classe A deve fazer referência a uma abstração (ou seja, uma interface) que a classe B implementa. Portanto, em vez de Classe A, dependendo da Classe B, a Classe B dependerá de uma interface que a Classe A controla. Esta é a inversão do controle.
O uso de interfaces permite que os desenvolvedores trocem facilmente em diferentes implementações dessas interfaces. Assim, a inversão da injeção de controle e dependência permite criar aplicativos que são vagamente acoplados, modulares, testáveis e sustentáveis. Observe que existem muitas maneiras de implementar a injeção de dependência no núcleo do ASP.NET. Embora os contêineres alternativos do IOC, como StructureMap e Ninject, forneçam recursos mais avançados, o contêiner DI integrado do ASP.NET Core é rápido e fácil de usar.
Injeção do construtor vs. a interface ISERVICEPROVER
Tanto a injeção do construtor quanto a interface do ISERVICEPROVER são técnicas para resolver dependências. No entanto, eles diferem significativamente nos casos de implicações e uso. Com a injeção do construtor, as dependências de uma classe são passadas através do construtor de classe no momento da compilação. Com a interface IServiceProvider, as dependências são recuperadas no tempo de execução. Assim, o IServiceProvider fornece uma opção quando as dependências são desconhecidas durante a compilação ou podem mudar após a compilação.