Constructor-based injection is the standard and recommended dependency injection pattern in NestJS, where dependencies are declared and injected through the class constructor.
Usage
@Injectable()
export class CatsService {
constructor(
private readonly catsRepository: CatsRepository,
private readonly logger: Logger,
) {}
}Advantages
- Clear visibility: All dependencies are explicitly declared in one place
- Immutability: Dependencies can be marked as
readonly - Type safety: Full TypeScript support
- Testability: Easy to mock dependencies in tests
Best practices
// ✅ Recommended: Constructor injection
@Injectable()
export class CatsService {
constructor(private readonly repo: CatsRepository) {}
}
// ❌ Avoid: Property injection (unless necessary)
@Injectable()
export class CatsService {
@Inject() private readonly repo: CatsRepository;
}Use Property-based Injection only in specific cases like inheritance chains where passing dependencies through super() becomes cumbersome.