如何在NestJS中将一个UseCase注入到另一个UseCase中?
实现FirstUsecases注入到SecondUsecases的方案
要在NestJS的MyProxyModule中完成FirstUsecases到SecondUsecases的注入,只需调整模块内SECOND_USECASE的provider配置,具体操作如下:
1. 确认SecondUsecases的构造函数定义
你的SecondUsecases类构造函数已经正确声明了依赖,只需补充原本需要的SecondRepository参数即可:
export class SecondUsecases { constructor( private readonly firstUseCases: FirstUsecases, private readonly secondRepository: SecondRepository ) {} async execute(): Promise<any> { this.firstUseCases.execute(); } }
2. 修改MyProxyModule中SECOND_USECASE的provider配置
在模块的register方法里,更新SECOND_USECASE的inject数组和useFactory逻辑,把FirstUsecases的令牌加入依赖注入列表:
static register(): DynamicModule { return { module: MyProxyModule, providers: [ { inject: [FirstRepository], provide: "FIRST_USECASE", useFactory: (firstRepository: FirstRepository) => new FirstUsecases(firstRepository), }, { // 注入数组添加FirstUsecases的令牌"FIRST_USECASE" inject: [SecondRepository, "FIRST_USECASE"], provide: "SECOND_USECASE", // useFactory参数顺序与inject数组对应,先接收SecondRepository,再接收FirstUsecases实例 useFactory: (secondRepository: SecondRepository, firstUseCases: FirstUsecases) => new SecondUsecases(firstUseCases, secondRepository), }, ] } }
关键注意点
- 因为FirstUsecases是通过令牌
"FIRST_USECASE"注册的,注入时必须使用该令牌作为依赖标识,不能直接用类名。 inject数组的顺序必须和useFactory的参数顺序完全一致,NestJS会按此顺序注入对应实例。
内容的提问来源于stack exchange,提问作者Hossein Safari
相关产品推荐
相关产品推荐

