Nest не может разрешить служебные зависимости по циклической зависимости - PullRequest
3 голосов
/ 15 марта 2020

Sidenote

Я создал минималистичный репозиторий c для целей воспроизведения: Ссылка на репозиторий репродукций


Я только что обновил мой проект Nest до версии 7.0.0. Я использую TypeORM и в настоящее время у меня есть 3 модуля в моем проекте. Всем им необходим доступ к файлам из другого модуля.

GraphNodesModule необходим доступ:

  • GraphsService
  • ModulesService

GraphsModule необходимо получить доступ:

  • GraphNodesService

ModulesModule необходимо получить доступ:

  • GraphNodesRepository

Все 3 из них экспортируют свой сервис, чтобы сделать его доступным в других модулях. My GraphNodesModule импортирует два других модуля для доступа к их службам и заботится о циклической зависимости

@Module({
  imports: [
    TypeOrmModule.forFeature([GraphNodesRepository]),
    forwardRef(() => GraphsModule),
    ModulesModule,
  ],
  providers: [GraphNodesService],
  controllers: [GraphNodesController],
  exports: [GraphNodesService],
})

. GraphsModule импортирует GraphNodesModule для доступа к службе и заботится о циклической зависимости

@Module({
  imports: [
    TypeOrmModule.forFeature([GraphsRepository]),
    forwardRef(() => GraphNodesModule),
  ],
  providers: [GraphsService],
  controllers: [GraphsController],
  exports: [GraphsService],
})

ModulesModule не нужно импортировать другие модули, он просто регистрирует другой репозиторий

@Module({
  imports: [
    TypeOrmModule.forFeature([ModulesRepository, GraphNodesRepository]),
  ],
  providers: [ModulesService],
  controllers: [ModulesController],
  exports: [ModulesService],
})

При запуске приложения я получаю следующую ошибку

[Nest] 3580 - 2020-03-15 11:55:19 [ExceptionHandler] Nest не может разрешить зависимости GraphNodesService (GraphNodesRepository,?, ModulesService). Убедитесь, что зависимость аргумента в индексе 1 доступна в контексте GraphNodesModule.

Конструктор GraphNodesService равен

constructor(
  @InjectRepository(GraphNodesRepository)
  private readonly graphNodesRepository: GraphNodesRepository,
  private readonly graphsService: GraphsService,
  private readonly modulesService: ModulesService,
) {}

, поэтому Кажется, GraphsService отсутствует. Но, как вы видите, я импортирую модуль, так что я ожидаю доступа к экспортированному сервису.

Как я могу это исправить?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 16 марта 2020

Чтобы решить эту проблему, я должен был сделать оба пути, как описано здесь

https://docs.nestjs.com/fundamentals/circular-dependency#forward -референция

Для конструкторов служб и для модулей

...