DEV Community

Cover image for Solving NestJS Dependency Injection Errors – A Real-World Example
Sarwar Hossain
Sarwar Hossain

Posted on

Solving NestJS Dependency Injection Errors – A Real-World Example

Recently, I ran into this error while developing a module. Here's how I diagnosed and solved it step by step.
WHen the Application grow much module Dependency Injection (DI) errors can become frustrating—especially when modules or services are not wired correctly.

🚨 The Error

embed Nest can't resolve dependencies of the UserOnboardingService (?, ?, ?).
Please make sure that the argument at index [X] is available in the UserOnboardingModule context.

🔍 Root Cause

  • A service depends on another provider or repository that hasn’t been properly registered.
  • A required module hasn’t been imported.
  • There is a circular dependency between modules.
  • You forgot to use @InjectRepository for custom repositories.
  • You forgot to export a service from a module when used elsewhere.

✅ My Scenario

`
src/

├── user/
│ ├── user.module.ts
│ └── repositories/
│ ├── user.repository.ts
│ └── user-preference.repository.ts

├── auth/
│ ├── auth.module.ts
│ └── auth.service.ts

├── user-onboarding/
├── user-onboarding.module.ts
├── user-onboarding.service.ts
└── user-onboarding.controller.ts

`

🧠 The Fix: Step by Step

  1. Import Needed Modules in UserOnboardingModule
// user-onboarding.module.ts
import { Module, forwardRef } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserRepository } from '../user/repositories/user.repository';
import { UserPreferenceRepository } from '../user/repositories/user-preference.repository';
import { UserOnboardingController } from './user-onboarding.controller';
import { UserOnboardingService } from './user-onboarding.service';
import { AuthModule } from '../auth/auth.module';
import { UserModule } from '../user/user.module';

@Module({
  imports: [
    TypeOrmModule.forFeature([
      UserRepository,
      UserPreferenceRepository,
    ]),
    forwardRef(() => AuthModule),
    forwardRef(() => UserModule),
  ],
  controllers: [UserOnboardingController],
  providers: [UserOnboardingService],
  exports: [UserOnboardingService],
})
export class UserOnboardingModule {}


Enter fullscreen mode Exit fullscreen mode

2. Inject Dependencies Correctly in the Service

// user-onboarding.service.ts
import { Injectable, Inject, forwardRef } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { UserRepository } from '../user/repositories/user.repository';
import { UserPreferenceRepository } from '../user/repositories/user-preference.repository';
import { AuthService } from '../auth/auth.service';
import { UserService } from '../user/user.service';

@Injectable()
export class UserOnboardingService {
  constructor(
    @InjectRepository(UserRepository)
    private readonly userRepository: UserRepository,

    @InjectRepository(UserPreferenceRepository)
    private readonly userPreferenceRepository: UserPreferenceRepository,

    @Inject(forwardRef(() => AuthService))
    private readonly authService: AuthService,

    @Inject(forwardRef(() => UserService))
    private readonly userService: UserService,
  ) {}

  // ... business logic
}


Enter fullscreen mode Exit fullscreen mode
  1. Export Services in the Providing Modules in your auth.module.ts and user.module.ts

🧩 What If You Have Circular Dependencies?

Use forwardRef() in both modules and service:

// In auth.module.ts and user.module.ts
imports: [forwardRef(() => UserOnboardingModule)],

in your service file 
@Inject(forwardRef(() => SomeService)) private someService: SomeService

Enter fullscreen mode Exit fullscreen mode

✅ Conclusion

Dependency injection in NestJS is powerful—but it requires precision. Always verify:

Module imports

Repository injections

Circular dependency handling

This small fix saved me hours of frustration, and I hope it helps you too!

Top comments (0)