Container de injeção de dependência (DI Container) \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 05 Horas 

 57 Min 

 40 Seg 

   Tempo restante da oferta: 05 57 40 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Container de injeção de dependência (DI Container)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Container de injeção de dependência (DI Container)

 Injetar dependências pode se tornar uma tarefa tediosa quando se têm muitas classes envolvidas. Um container de injeção de dependência resolve grande parte desse problema.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 10 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/container.jpg)  

No artigo [Entendendo Injeção de Dependência](https://www.treinaweb.com.br/blog/entendendo-injecao-de-dependencia/) vimos sobre o que é injeção de dependência, seu funcionamento e como se dá a sua aplicação.

Injetar dependências pode se tornar uma tarefa tediosa quando se têm muitas classes envolvidas. Antes de injetar uma dependência ela precisa ser instanciada. Portanto, não cuidamos apenas da “injeção”, precisamos também ter o conhecimento de quais objetos ela precisa para funcionar.

Um *container de injeção de dependência* (*DI Container*) gerencia e automatiza as instanciações. Dizemos pra ele como um objeto deve ser criado (essa é a parte que nos toca, o nosso conhecimento sobre ele) e então sempre que o precisarmos, basta que usemos o *container* para obtê-lo.

Esse artigo utilizará [PHP](https://www.treinaweb.com.br/blog/o-que-e-php/ "O que é PHP?") como linguagem base para os exemplos, no entanto, há de se destacar, o conceito é agnóstico à linguagem. Se PHP não é a sua “praia”, não tem problema, você pode pesquisar por *“dependency injection container C#”* ou por qualquer outra linguagem que encontrará importantes referências e implementações.

[  ![PHP  - Banco de dados](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Banco de dados Conhecer o curso ](https://www.treinaweb.com.br/curso/php-banco-de-dados)

No cenário dos frameworks PHP, os mais utilizados pelo mercado ([Symfony](https://www.treinaweb.com.br/blog/o-que-e-symfony/ "O que é Symfony?"), [Laravel](https://www.treinaweb.com.br/blog/o-que-e-laravel/ "O que é Laravel?"), etc) implementam, cada um, o seu próprio container e, assim o fazem, pois seria impraticável manter os objetos “conversando” pelo detrimento da enorme quantidade de instanciações repetidas que precisariam ser feitas no ciclo de uma simples requisição. Esses frameworks possuem centenas de classes e não ter por onde resolver as dependências e reutilizá-las sob demanda, é impensável.

Um *container* nada mais é do que um “mapa” das dependências que o projeto usa, em termos práticos, é uma classe que armazena o conhecimento sobre seus objetos e suas dependências.

Uma implementação genérica de um *container* (para que possamos assimilar melhor):

```php
