0
0
NestJSframework~10 mins

Constructor injection in NestJS - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Constructor injection
Define Service Class
Add @Injectable Decorator
Define Constructor with Dependency Parameter
NestJS Creates Instance
NestJS Injects Dependency into Constructor
Service Ready to Use with Dependency
This flow shows how NestJS uses constructor injection to provide dependencies automatically when creating a service instance.
Execution Sample
NestJS
import { Injectable } from '@nestjs/common';

@Injectable()
export class DogsService {}

@Injectable()
export class CatsService {
  constructor(private readonly dogsService: DogsService) {}
}
This code defines a CatsService that receives DogsService via constructor injection.
Execution Table
StepActionEvaluationResult
1NestJS reads CatsService classFinds @Injectable decoratorMarks CatsService as injectable
2NestJS sees constructor parameter dogsServiceType is DogsServicePrepares to inject DogsService instance
3NestJS creates DogsService instanceDogsService is injectableDogsService instance ready
4NestJS calls CatsService constructorPasses DogsService instance as argumentCatsService instance created with dogsService
5CatsService readydogsService property setCan use dogsService methods inside CatsService
💡 Constructor injection completes when CatsService instance is created with DogsService dependency injected.
Variable Tracker
VariableStartAfter Step 3After Step 4Final
dogsServiceundefinedDogsService instance createdInjected into CatsService constructorAvailable as private readonly property
Key Moments - 3 Insights
Why do we add @Injectable() above the service class?
NestJS needs @Injectable() to know it can create and inject this class. Without it, injection won't work (see execution_table step 1).
How does NestJS know what to inject into the constructor?
NestJS uses the constructor parameter type (DogsService) to find or create the right instance to inject (see execution_table step 2 and 3).
What happens if the dependency is missing or not injectable?
NestJS will throw an error during instance creation because it can't resolve the dependency (not shown in table but happens before step 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what happens at step 3?
ANestJS creates an instance of DogsService
BNestJS calls CatsService constructor
CNestJS marks CatsService as injectable
DNestJS injects DogsService into CatsService
💡 Hint
Check the 'Action' and 'Result' columns at step 3 in the execution_table.
At which step is the DogsService instance passed into CatsService constructor?
AStep 1
BStep 2
CStep 4
DStep 5
💡 Hint
Look for the step where CatsService constructor is called with DogsService instance.
If we remove @Injectable() from CatsService, what will happen?
ANestJS will still inject DogsService without error
BNestJS will throw an error because CatsService is not injectable
CDogsService will not be created
DCatsService will be created but dogsService will be undefined
💡 Hint
Refer to key_moments about the role of @Injectable() and execution_table step 1.
Concept Snapshot
Constructor Injection in NestJS:
- Use @Injectable() on classes to enable injection.
- Declare dependencies as constructor parameters.
- NestJS creates and injects dependencies automatically.
- This helps keep code clean and testable.
- Missing @Injectable() causes injection errors.
Full Transcript
Constructor injection in NestJS means that when you create a service class, you add the @Injectable decorator so NestJS knows it can create it. Then you add dependencies as parameters in the constructor. When NestJS creates your service, it automatically creates and passes the dependencies into the constructor. This way, your service can use other services easily without manually creating them. If you forget the @Injectable decorator, NestJS will not inject dependencies and will throw an error. This process helps keep your code organized and easy to test.