Javascript Nest js服务未定义,可能是由于循环依赖关系
我有两个模块Javascript Nest js服务未定义,可能是由于循环依赖关系,javascript,node.js,typescript,dependency-injection,nestjs,Javascript,Node.js,Typescript,Dependency Injection,Nestjs,我有两个模块ZohoModule和TaskModule。Zoho模块有一个ZohoService 任务模块有两个服务UtilityTaskService和TaskService 两者都作为任务模块提供程序添加,并在任务模块中导出 我的第一个问题是:为什么我必须在实用任务服务中为任务服务添加forwardref?如果我删除forwardref,它会给我一个依赖项错误,但这两个服务都是同一个模块的一部分 其次,当我从ZohoService调用utilityStasksservice中的方法时,如果u
ZohoModule
和TaskModule
。Zoho模块有一个ZohoService
任务模块有两个服务UtilityTaskService
和TaskService
两者都作为任务模块提供程序添加,并在任务模块中导出
我的第一个问题是:为什么我必须在实用任务服务
中为任务服务
添加forwardref
?如果我删除forwardref
,它会给我一个依赖项错误,但这两个服务都是同一个模块的一部分
其次,当我从ZohoService
调用utilityStasksservice
中的方法时,如果utilityStasksservice
正在调用TasksService
中的所有服务都将变得未定义,则会出现严重的问题
乙二醇-
Zoho模块中的ZohoService.ts:
@Injectable()
export class ZohoService {
constructor(
private readonly utilityService: UtilityTaskService,
) { }
callUtilityService(){
this.utilityService.validate();
}
TaskModule中的UtilityTaskService.ts:
(当TasksService是同一TaskModule的一部分时,为什么我必须添加forwardref
)
TaskModule中的TasksService.ts:
@Injectable()
export class TasksService {
constructor(
@InjectModel('TaskType')
private taskTypeModel: Model<ITaskTypeSchema>,
private redisService: RedisService,
) { }
async create() {
this.redis.fetchData();
this.taskTypeModel.find();
}
我在这里被困了两天。我不确定,但也许您应该在任务服务中转发您的
RedisService
,然后从TaskModule和UtilityTaskService中删除forwardRef。我不确定,但也许您应该在Tasks服务中转发您的RedisService
,然后从TaskModule和UtilityTaskService中删除forwardRef。
@Injectable()
export class TasksService {
constructor(
@InjectModel('TaskType')
private taskTypeModel: Model<ITaskTypeSchema>,
private redisService: RedisService,
) { }
async create() {
this.redis.fetchData();
this.taskTypeModel.find();
}
@Module({
imports: [MongooseModule.forFeature([
{ name: 'TaskType', schema: TaskTypeSchema },
]),
TypeOrmModule.forFeature([CounterEntity]),
// RedisModule,
forwardRef(() => RedisModule),
],
providers: [
TasksService,
UtlityTaskService,
],
exports: [TasksService, UtilityTaskService],
controllers: [TasksController],
})