Skip to content

NestJS cannot resolve dependency that's clearly there

Published: at 09:23 AM

Symptoms

When trying to start the app:

[Nest] 71998  - 11/12/2023, 5:12:05 PM   ERROR [ExceptionHandler] Nest can't resolve dependencies of the OfacListReloaderService (LOGGER_SERVICE, ?, OfacListDownloaderService). Please make sure that the argument dependency at index [1] is available in the ScreeningModule context.

Potential solutions:
- Is ScreeningModule a valid NestJS module?
- If dependency is a provider, is it part of the current ScreeningModule?
- If dependency is exported from a separate @Module, is that module imported within ScreeningModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

Error: Nest can't resolve dependencies of the OfacListReloaderService (LOGGER_SERVICE, ?, OfacListDownloaderService). Please make sure that the argument dependency at index [1] is available in the ScreeningModule context.

Potential solutions:
- Is ScreeningModule a valid NestJS module?
- If dependency is a provider, is it part of the current ScreeningModule?
- If dependency is exported from a separate @Module, is that module imported within ScreeningModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

Screening module:

import { Module } from "@nestjs/common";
import { LoggingModule } from "@org/logging";
import { AppConfigModule } from "@org/config";
import { StorageModule } from "@org/storage";
import { DataModule } from "@org/data";
import { SanctionsScreeningService } from "./sanctions-screening.service";
import { OfacListDownloaderService, OfacListReloaderService } from "./ofac";
import { CsvListDownloaderService } from "./csv-list-downloader.service";

@Module({
  imports: [
    LoggingModule.forRoot(),
    AppConfigModule.forRoot(),
    StorageModule.forRoot(),
    DataModule.forRoot(),
  ],
  providers: [
    SanctionsScreeningService,
    OfacListDownloaderService,
    OfacListReloaderService,
    CsvListDownloaderService,
  ],
  exports: [SanctionsScreeningService],
})
export class ScreeningModule {}

Service in question:

@Injectable()
export class OfacListReloaderService implements OnModuleInit {
  constructor(
    @Inject(LOGGER_SERVICE) private readonly logger: ILogger,
    @Inject(SanctionsScreeningService)
    private readonly screening: SanctionsScreeningService,
    @Inject(OfacListDownloaderService)
    private readonly downloader: OfacListDownloaderService
  ) {
    this.logger.setContext(OfacListReloaderService.name);
  }
}

The SanctionsScreeningService is clearly on the providers list of ScreeningModule

Fix

In that case it was due to circular imports between some models, eh.