0
0
NestJSframework~10 mins

Dependency injection basics in NestJS - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Dependency injection basics
Define Service Class
Register Service in Module
Inject Service into Consumer
Use Service Methods
NestJS Provides Instance Automatically
This flow shows how a service is created, registered, injected, and used automatically by NestJS.
Execution Sample
NestJS
import { Injectable } from '@nestjs/common';

@Injectable()
export class CatsService {
  getCats() { return ['Tom', 'Jerry']; }
}
Defines a simple service class that NestJS can inject where needed.
Execution Table
StepActionEvaluationResult
1Define CatsService with @Injectable()NestJS marks it as injectableCatsService class ready for injection
2Register CatsService in AppModule providersNestJS adds it to the containerCatsService instance managed by NestJS
3Inject CatsService into CatsController constructorNestJS finds provider and injects instanceCatsController has CatsService instance
4Call catsService.getCats() in controller methodMethod returns ['Tom', 'Jerry']Controller returns cat list
5Request handled with injected service dataResponse sent with cat namesExecution complete
💡 All steps complete; service injected and used successfully
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
CatsServiceundefinedDefined class with methodRegistered in containerInstance injected in controllerMethod called returns arrayInstance used to respond
Key Moments - 3 Insights
Why do we add @Injectable() to the service class?
Because @Injectable() tells NestJS this class can be managed and injected. Without it, NestJS won't create or inject the service (see execution_table step 1).
How does NestJS know which instance to inject?
NestJS uses the providers registered in the module to find the matching class and injects the same instance wherever needed (see execution_table step 2 and 3).
What happens if we forget to register the service in the module?
NestJS will throw an error because it can't find the provider to inject (missing step 2 in execution_table).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the result after step 3?
ACatsController has CatsService instance
BCatsService method returns array
CCatsService class is undefined
DRequest handled with cat names
💡 Hint
Check the 'Result' column in step 3 of execution_table
At which step does NestJS register the service in its container?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look for 'Registered in container' in the 'Result' column
If we remove @Injectable() from CatsService, what will happen?
ANestJS will still inject the service
BService methods will return empty arrays
CNestJS will throw an error at injection
DNothing changes
💡 Hint
Refer to key_moments about the role of @Injectable() and execution_table step 1
Concept Snapshot
Dependency Injection in NestJS:
- Mark classes with @Injectable() to make them injectable.
- Register services in module providers.
- Inject services via constructor in consumers.
- NestJS creates and shares instances automatically.
- Enables easy reuse and testing.
Full Transcript
Dependency injection in NestJS means creating service classes marked with @Injectable(), registering them in a module's providers array, and then injecting them into other classes like controllers via constructor parameters. NestJS automatically creates and shares instances of these services. This process helps organize code and makes it easy to reuse and test. The execution flow starts with defining the service, registering it, injecting it, and finally using its methods to handle requests.