0Pricing
TypeScript Academy · Aula

Contêineres de DI com InversifyJS

Registre e resolva serviços com um contêiner.

Contêineres de DI com InversifyJS é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 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.

Por que usar um contêiner de DI?

Configurar manualmente grafos de objetos grandes é trabalhoso e propenso a erros. Um contêiner de DI registra como construir cada dependência e as resolve automaticamente. InversifyJS é um contêiner popular para TypeScript.

Instalando e ativando

O InversifyJS depende de decoradores e metadados de reflexão. Você importa de inversify e ativa experimentalDecorators e reflect-metadata.

import "reflect-metadata";
import { Container, injectable, inject } from "inversify";

Marcando classes com @injectable

O decorador @injectable() informa ao contêiner que uma classe pode ser construída e injetada. Toda classe construída pelo contêiner precisa dele.

import { injectable } from "inversify";

@injectable()
class ConsoleLogger {
  log(m: string) { console.log(m); }
}

Declarando dependências com @inject

Use @inject(token) nos parâmetros do construtor para informar ao contêiner qual associação fornecer. O token identifica a dependência.

@injectable()
class OrderService {
  constructor(@inject("Logger") private logger: ConsoleLogger) {}
  place() { this.logger.log("placed"); }
}

Criando um contêiner

Um Container contém todas as associações da sua aplicação. Você cria um na inicialização e registra as dependências nele.

import { Container } from "inversify";
const container = new Container();

Associando uma interface a uma implementação

A API fluente bind<T>(token).to(Impl) mapeia um token, geralmente uma interface, para uma classe concreta que o contêiner instanciará.

interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);

Resolvendo serviços

container.get<T>(token) cria o serviço solicitado, construindo e injetando recursivamente suas dependências para você.

container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();

Trocando implementações

Para usar outro logger, associe novamente o token a outra classe. Os consumidores não são afetados porque dependem do token, não da classe concreta.

@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);

Escopo de instância única

Por padrão, cada get pode criar uma nova instância. Use inSingletonScope() para compartilhar uma instância em todo o app.

container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();

Testando com o contêiner

Nos testes, você pode criar um contêiner novo e associar dublês, obtendo os mesmos benefícios de configuração e isolando a unidade em teste.

const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);

Compensações dos contêineres

Os contêineres reduzem o código repetitivo em grafos grandes, mas acrescentam uma dependência, decoradores e indireção. Em aplicações pequenas, a injeção manual pelo construtor costuma ser mais clara.

Verificação rápida

Verificação rápida desta lição.

Recapitulação

InversifyJS usa @injectable, @inject(token) e um Container. Você usa bind<Interface>(token).to(Impl), e container.get resolve o grafo automaticamente. Ele precisa de reflect-metadata e decoradores, trocando código repetitivo por indireção.

Perguntas Frequentes

A aula “Contêineres de DI com InversifyJS” é grátis?

Sim — o texto completo de “Contêineres de DI com InversifyJS” é 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 “Contêineres de DI com InversifyJS”?

Registre e resolva serviços com um contêiner. 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 3 de 4.

Quanto tempo leva a aula “Contêineres de DI com InversifyJS”?

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