0Pricing
TypeScript Academy · Aula

Injeção pelo Construtor

Injete dependências de forma organizada por meio de construtores.

Injeção pelo Construtor é uma aula grátis de TypeScript 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 TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

Injeção pelo construtor em profundidade

A injeção pelo construtor declara cada dependência como um parâmetro do construtor. O objeto está totalmente configurado no momento em que existe, o que torna impossível esquecer colaboradores obrigatórios.

Propriedades de parâmetro

O TypeScript pode declarar e atribuir uma dependência em uma única etapa usando um modificador de acesso no parâmetro. private readonly cria e atribui o campo automaticamente.

interface Mailer { send(to: string, body: string): void; }
class Notifier {
  constructor(private readonly mailer: Mailer) {}
}

Dependências baseadas em interface

Depender de uma interface em vez de uma classe desacopla o consumidor de qualquer implementação específica. Qualquer objeto compatível com a interface pode ser fornecido.

interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
  send(to: string, body: string) { console.log("SMTP ->", to); }
}

Configurando na raiz de composição

O local que cria o grafo de objetos é a raiz de composição. Nesse local, você escolhe as implementações concretas e as injeta.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  notify(to: string) { this.mailer.send(to, "hello"); }
}
const app = new Notifier(new SmtpMailer());
app.notify("a@b.com");

Trocando implementações

Como a dependência é uma interface, você pode fornecer uma implementação completamente diferente sem tocar em Notifier. Essa é a flexibilidade central oferecida por DI.

class FakeMailer implements Mailer {
  sent: string[] = [];
  send(to: string) { this.sent.push(to); }
}
const fake = new FakeMailer();
new Notifier(fake).notify("x@y.com");
console.log(fake.sent); // ["x@y.com"]

Testando sem E/S real

Injetar o mailer falso permite que um teste verifique o que teria sido enviado, sem enviar um e-mail real. O teste é rápido, determinístico e isolado.

const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // true

Múltiplas dependências

Liste quantas dependências forem necessárias. Cada uma é explícita, tipada e obrigatória, mantendo visíveis, de imediato, as necessidades da classe.

interface Logger { log(m: string): void; }
class Notifier {
  constructor(
    private readonly mailer: Mailer,
    private readonly logger: Logger,
  ) {}
}

readonly impede reatribuições

Marcar os campos injetados como readonly impede que sejam trocados durante a vida do objeto, mantendo seus colaboradores estáveis e previsíveis.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  // this.mailer = ... would be a compile error
}

Nenhum new oculto internamente

Uma classe que usa injeção pelo construtor não deve criar internamente seus colaboradores com new. Todas as dependências chegam pelo construtor, mantendo o acoplamento explícito.

Obrigatórias versus opcionais

As dependências obrigatórias pertencem ao construtor. As que forem realmente opcionais podem usar uma implementação sem operação como padrão, ainda sendo passadas externamente em vez de construídas internamente.

const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);

Resumo dos benefícios

A injeção pelo construtor torna as dependências explícitas, os objetos totalmente inicializados, as implementações substituíveis e os testes simples. Por bons motivos, ela é o estilo padrão de DI.

Verificação rápida

Verificação rápida sobre esta lição.

Recapitulação

A injeção pelo construtor declara as dependências como parâmetros, geralmente private readonly, tipados por uma interface. A raiz de composição escolhe as implementações; os testes passam dublês. Os objetos estão sempre totalmente configurados, e os colaboradores podem ser trocados sem editar a classe.

Perguntas Frequentes

A aula “Injeção pelo Construtor” é grátis?

Sim — o texto completo de “Injeção pelo Construtor” é 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 TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “Injeção pelo Construtor”?

Injete dependências de forma organizada por meio de construtores. Você pratica TypeScript 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 TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript 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 “Injeção pelo Construtor”?

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 TypeScript Academy?

Sim. Cada aula de TypeScript 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. Fundamentos da Inversão de Controle
  2. Injeção pelo Construtor
  3. Contêineres de DI com InversifyJS
  4. Tokens de Serviço com Segurança de Tipos
← Voltar para TypeScript Academy