Nest无法根据循环依赖关系解析服务依赖关系

时间:2020-03-15 11:02:44

标签: typescript dependency-injection nestjs circular-dependency

侧注

我创建了一个用于复制的简约存储库:Link to reproduction repo


我刚刚将Nest项目更新为版本7.0.0。我正在使用TypeORM,目前在我的项目中有3个模块。他们都需要从另一个模块访问文件

GraphNodesModule需要访问:

  • GraphsService
  • ModulesService

GraphsModule需要访问:

  • GraphNodesService

ModulesModule需要访问:

  • GraphNodesRepository

所有3个用户都导出其服务,以使其在其他模块中可访问。我的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],
})

运行应用程序时出现以下错误

[嵌套] 3580-2020-03-15 11:55:19 [ExceptionHandler]嵌套不能 解析GraphNodesService(GraphNodesRepository, ?,ModulesService)。请确保参数依赖项位于 索引1在GraphNodesModule上下文中可用。

GraphNodesService的构造函数是

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

因此似乎缺少GraphsService。但是如您所见,我正在导入模块,因此希望可以访问导出的服务。

我该如何解决?

如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

要解决此问题,我必须按照此处所述的两种方式进行操作

https://docs.nestjs.com/fundamentals/circular-dependency#forward-reference

用于服务构造函数和模块