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
- Fundamentos da Inversão de Controle
- Injeção pelo Construtor
- Contêineres de DI com InversifyJS
- Tokens de Serviço com Segurança de Tipos