Nest无法解决循环依赖性上的服务依赖性

问题描述 投票:3回答:1

Sidenote

我为复制目的创建了一个简约的存储库: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似乎丢失了。但是如您所见,我正在导入模块,因此希望可以访问导出的服务。

我该如何解决?

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

typescript dependency-injection nestjs circular-dependency
1个回答
0
投票

为了解决这个问题,我必须按照此处描述的两种方法进行操作

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

© www.soinside.com 2019 - 2024. All rights reserved.