0Pricing
PHP Academy · Aula

Contêiner de DependencyInjection

Registre serviços e conecte dependências com o contêiner DI do Symfony.

Contêiner de DependencyInjection é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

O que é injeção de dependências?

Dependency Injection (DI) é um padrão no qual uma classe recebe suas dependências de fora, em vez de criá-las internamente — tornando o código testável e fracamente acoplado.

O componente DI do Symfony

O componente symfony/dependency-injection do Symfony fornece um poderoso contêiner de IoC que pode conectar automaticamente, configurar e armazenar em cache definições de serviços.

$ composer require symfony/dependency-injection

Criando um contêiner

Crie um contêiner e registre serviços.

<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;

$container = new ContainerBuilder();

// Register a service:
$container->register("logger", \App\Logger::class);

Adicionando argumentos do construtor

Passe argumentos do construtor para as definições de serviços.

<?php
$container->register("mailer", \App\Mailer::class)
    ->addArgument("smtp.example.com")
    ->addArgument(587);

Referências de serviços

Injete um serviço em outro usando uma Reference.

<?php
use Symfony\Component\DependencyInjection\Reference;

$container->register("email_service", \App\EmailService::class)
    ->addArgument(new Reference("mailer"))
    ->addArgument(new Reference("logger"));

Recuperando um serviço

Busque um serviço no contêiner. As dependências são resolvidas automaticamente.

<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");

Injeção automática

Com a injeção automática ativada, o contêiner analisa as dicas de tipo e injeta automaticamente os serviços correspondentes.

<?php
$container->register(EmailService::class)
    ->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)

Parâmetros

Armazene valores de configuração como parâmetros do contêiner.

<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);

// Reference in service definition:
$container->register("mailer", Mailer::class)
    ->addArgument("%mailer.host%")
    ->addArgument("%mailer.port%");

Configuração YAML

Defina serviços em YAML (requer symfony/config e symfony/yaml).

# services.yaml
services:
    App\Mailer:
        arguments:
            - "%mailer.host%"
            - "%mailer.port%"

Compilando o contêiner

Compile o contêiner para obter desempenho. Isso valida as definições e otimiza o grafo de serviços.

<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());

Serviços compartilhados e não compartilhados

Por padrão, os serviços são compartilhados (instância única). Defina shared(false) para obter uma nova instância sempre que o serviço for recuperado.

Resumo

O contêiner de DI do Symfony registra, conecta e resolve serviços. Use a injeção automática por conveniência, parâmetros para configuração e compile o contêiner em produção para obter desempenho.

Verificação rápida

O que a injeção automática faz no contêiner de DI do Symfony?

Perguntas Frequentes

A aula “Contêiner de DependencyInjection” é grátis?

Sim — o texto completo de “Contêiner de DependencyInjection” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Contêiner de DependencyInjection”?

Registre serviços e conecte dependências com o contêiner DI do Symfony. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Contêiner de DependencyInjection”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. HttpFoundation: solicitação e resposta
  2. Contêiner de DependencyInjection
  3. EventDispatcher: eventos desacoplados
  4. Componente Console: comandos CLI
← Voltar para PHP Academy