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

时间:2018-08-05 08:59:41

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

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

任何帮助将不胜感激

user.module.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]无法读取未定义的属性'module'。

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

预先感谢

3 个答案:

答案 0 :(得分:0)

您还需要通过UserService注入forwardRef的(循环)依赖项,请参见CommonService example

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

此外,只能在一个模块中声明提供程序。如果要在其他模块中使用它们,请导出这些提供程序,然后仅导入模块:UserModule导入AuthModule再次提供AuthService。这样,所有导出的提供程序都可以在UserModule中使用。

因此,从UserService的提供者列表中删除AuthModule,并从TokenService的{​​{1}}中删除。

答案 1 :(得分:0)

如果使用TypeORM将存储库添加到服务中,然后在模块文件中添加以下代码,则会遇到上述错误

imports: [
  TypeOrmModule.forFeature([<your-entiry>])
],

答案 2 :(得分:0)

当我的数组提供程序中有两个连续的逗号时,我出错了

  providers: [
    AService,
    BService,, // <- NOT ALLOWED CIRCULAR PROBLEM 
  ],