Replies: 3 comments 1 reply
|
如果LazyInject添加到另一个,就会报循环依赖错误 @provide() @provide() 报错: MidwayCommonError: Circular dependency detected: SocketController -> Aservice -> Bservice -> Aservice |
|
这里要注意 所以 @Provide()
export class Aservice {
@Inject()
private b: Bservice;
}
@Provide()
export class Bservice {
@LazyInject(() => Aservice)
private a: Aservice;
}如果 另外 |
|
拆公共逻辑这个处理是更推荐的,两个 service 互相依赖后面维护成本会比较高,聚合校验这类逻辑建议下沉成独立的 validator/service/function,再由 A、B 分别依赖它。 补充一下这个报错本身: 可以重点确认两点:
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Describe the problem(描述问题)
升级了最新的V4版本(^4.2.1),项目中有循环依赖,使用了LazyInject,报错 :
TypeError: Class constructor Aservice cannot be invoked without 'new'
at formatObjectIdentifier (D:\code\server\node_modules@midwayjs\core\dist\context\managedResolverFactory.js:26:16)
at ManagedResolverFactory.createInstance (D:\code\server\node_modules@midwayjs\core\dist\context\managedResolverFactory.js:233:31)
at ManagedResolverFactory.createInstance (D:\code\server\node_modules@midwayjs\core\dist\context\managedResolverFactory.js:247:34)
at ManagedResolverFactory.createInstance (D:\code\server\node_modules@midwayjs\core\dist\context\managedResolverFactory.js:247:34)
at ManagedResolverFactory.createAsync (D:\code\server\node_modules@midwayjs\core\dist\context\managedResolverFactory.js:86:31)
at MidwayRequestContainer.getAsync (D:\code\server\node_modules@midwayjs\core\dist\context\requestContainer.js:36:14)
at D:\code\server\node_modules@midwayjs\core\dist\common\webGenerator.js:42:61
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at D:\code\server\src\middleware\auth.middleware.ts:92:9
大致代码如下
@provide()
export class Bservice {
@LazyInject(() => Aservice )
private a: Aservice
}
@provide()
export class Aservice {
@Inject()
private b: Bservice
}
但是代码中这样写不报错:
@autoload()
@singleton()
export class Cservice {
@Inject()
d: Dservice
}
@provide()
@singleton()
export class Dservice {
@LazyInject(() => Cservice)
c: Cservice
}
求解疑
Midway Versions(Midway 版本)
All reactions