dependency-injection - Nest 无法解析 UserService (?, +) 的依赖关系。请确保索引 [0] 处的参数在当前上下文中可用

标签 dependency-injection inversion-of-control circular-dependency nestjs

有一些问题,di/circular-references 我确定我做错了,我只是看不到它。

任何帮助将非常感激

用户模块.ts

@Module({
    imports: [
        TypeOrmModule.forFeature([User]),
        forwardRef(() => AuthModule)
    ],
    providers: [ UserService, TokenService ],
    exports: [ UserService ]
})
export class UserModule {}

auth.module.ts
@Module({
    imports: [ forwardRef(() => UserModule) ],
    controllers: [ AuthController ],
    providers: [
        AuthService,
        UserService,
        TokenService
    ],
    exports: [ AuthService, TokenService ]
})
export class AuthModule {}

app.module.ts
@Module({
  imports: [
    TypeOrmModule.forRoot(),
    forwardRef(() => UserModule),
    forwardRef(() => AuthModule),
  ],
})
export class AppModule {}

我得到 [ExceptionHandler] 无法读取未定义的属性“模块”。

最初有“Nest 无法解决 UserService 的依赖项。然后我完全删除了 UserModule,只使用了 AuthModule,一切正常,然后决定今天重新添加 UserModule,并将代码从 AuthModule 移回 UserModule,然后发现了 forwardRef(() => ),现在我得到了无法读取的属性“模型”。

提前致谢

最佳答案

您需要注入(inject) UserService 的(循环)依赖项通过 forwardRef同样,请参阅 CommonService example :

constructor(@Inject(forwardRef(() => TokenService)) private readonly tokenService: TokenService) {}

此外,提供者只能在一个模块中声明。如果您想在另一个模块中使用它们,请导出这些提供程序,然后只导入模块:UserModule进口 AuthModule不是 提供AuthService再次。这样,所有导出的提供程序都可以在 UserModule 中使用。 .

因此,删除 UserService来自 AuthModule的提供商列表和 TokenService来自 UserModule .

关于dependency-injection - Nest 无法解析 UserService (?, +) 的依赖关系。请确保索引 [0] 处的参数在当前上下文中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692886/

相关文章:

.net - Fluent IOC 配置/模块的最佳位置(目前正在尝试 Ninject)

laravel - 在 Laravel 中使用 Facade 和 IoC 有什么意义

c# - 如何在不强制用户使用库的 IOC 容器的情况下编写库

c# - 传递 IOC 容器的替代方案

Maven 父 POM : Circular dependencies

c++ - dll与visual studio之间的循环依赖

c++ - 如何解决 "Does not name a type"错误

使用 Dagger 进行 Android 功能测试

c# - 确定 Neo4j 驱动程序和 session 对象的范围

php - 了解 IoC 容器和依赖注入(inject)