【问题标题】:Nest can't resolve dependencies of the Service in Global ModuleNest 无法解析全局模块中服务的依赖关系
【发布时间】:2021-07-17 01:42:33
【问题描述】:

我有一个名为FirebaseModule 的全局模块,它导出FirebaseService,我将此模块导入app.module.ts,然后我尝试在UsersService 中使用FirebaseService,但由于缺少依赖项而失败问题。

有趣的是,如果我删除服务上的使用并仅在控制器上使用它,一切都会失败,但如果我想在服务提供者中使用它,它就会开始失败。

我的代码:

app.module.ts

@Module({
  imports: [
    CustomLoggerModule,
    ConfigurationModule,
    TypeOrmModule.forRootAsync({
      useExisting: ConfigurationService,
    }),
    FirebaseModule,
    UsersModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

firebase.module.ts

@Global()
@Module({
  imports: [],
  providers: [FirebaseService],
  exports: [FirebaseService],
})
export class FirebaseModule {}

users.module.ts

@Module({
  imports: [CqrsModule, TypeOrmModule.forFeature([UsersRepository])],
  controllers: [UsersController],
  providers: [UsersService, ...CommandHandlers, ...EventHandlers],
  exports: [UsersService, TypeOrmModule.forFeature([UsersRepository])],
})
export class UsersModule {}

users.controller.ts

@Controller('users')
@UseGuards(AuthGuard('firebase'))
export class UsersController {
  constructor(
    private readonly usersService: UsersService,
    private readonly firebaseService: FirebaseService,
  ) {}
}

users.service.ts

@Injectable()
export class UsersService {
  constructor(
    private readonly firebaseService: FirebaseService,
    private readonly repository: UsersRepository,
  ) {}
}

我收到以下错误:

Nest can't resolve dependencies of the UsersService (?, UsersRepository). Please make sure that the argument dependency at index [0] is available in the UsersModule context.

【问题讨论】:

    标签: typescript firebase nestjs nestjs-config nestjs-passport


    【解决方案1】:

    您的 UserService 中很可能有一个指向 FirebaseService 的循环文件引用。如果 Nest 能够解析类/提供者/注入令牌的名称,它会明确说明该令牌是什么,但当它无法解析时,所有输出都是 dependencyHere's a little more information from the docs

    【讨论】:

    • 没有循环引用。如果有,Nest 会告诉你何时有循环依赖。
    • 我没说它是循环引用(即classA依赖classB依赖classA)我说它是循环文件导入(fileA导入fileB导入fileA),这个链可以相当好嵌套,但它是循环文件导入。如果您可以提供对您代码的访问权限,我可以找到它。
    • 我将 firebase 模块移到了它自己的文件夹中并修复了它!谢谢
    • 我猜是桶文件导入?
    • 是的,我认为这与我将整个文件夹导出到一个索引文件和另一个文件中我正在使用该服务有关。
    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2022-01-17
    • 2018-11-21
    • 2020-03-12
    相关资源
    最近更新 更多