我遇到了 NestJS 的依赖关系未自动解决的问题:
@Module({
imports: [ConfigModule],
controllers: [],
providers: [ConfigService, AwsService],
exports: [AwsService],
})
export class AwsModule {}
@Module({
imports: [
AwsModule,
],
controllers: [AuthController],
providers: [AuthService, AwsService],
exports: [AuthService]
})
export class AuthModule {}
到目前为止一切顺利,上述工作完全正常。
现在当我想在其他地方使用 AuthService 时,麻烦就来了:
@Module({
imports: [
...
AuthModule,
],
controllers: [UserController],
providers: [UserService, AuthService, /*** BREAKS WITHOUT THIS: ***/ AwsService],
exports: [SequelizeModule],
})
export class UserModule {}
如果我不在这里包含仅由 AuthModule 使用的 AwsService,它就会崩溃。
为什么我的 UserModule 需要了解 AuthModule 的内部依赖项? 如果我在程序中的其他地方使用 AuthModule,我不想在使用 AuthModule 的任何地方重复导入 AuthModule 的所有依赖项。 Nest 应该弄清楚如何解决这些依赖关系?
在我的根 ApplicationModule 中,我正在导入声明的所有模块:
@Module({
imports: [
//.env File Configuration Support:
ConfigModule.forRoot({
isGlobal: true,
}),
...
//App Modules:
AwsModule,
AuthModule,
UserModule,
],
providers: [AppService],
controllers: [AppController],
})
export class AppModule {}
您多次注册
AwsService
提供商。对于 UserModule
不需要这样做,因为它正在导入 AwsModule
——它的 AwsService
数组中有 exports
。这是 Nestjs 模块上非常基本的东西。
所以从
AwsService
中删除 UserModule
,我想你应该没问题。