No NestJS, praticamente toda a arquitetura do framework gira em torno de um conceito central: a inversão de controle através da injeção de dependência. Quando alguém realmente entende isso, começa a entender por que o NestJS funciona da maneira que funciona, por que os módulos existem, por que usamos providers, e por que quase tudo no framework depende do container interno do Nest.
O primeiro conceito importante é entender o problema que a injeção de dependência resolve.
Imagine uma classe qualquer, por exemplo um service responsável por criar usuários. Esse service precisa salvar informações no banco, então ele precisa de um repository para persistir as informações. A forma mais simples e direta de fazer isso seria a própria classe criar sua dependência internamente:
classe UserService {
private repository = new UserRepository();






