问题描述
我有两个 Angular 服务,分别是 WindowDetailsService
和 SessionHelperService
。现在,在我的 WindowDetailsService
代码中,我需要有以下场景:
WindowDetailsService:
import { SessionHelperService } from '../pkg/session/session-helper.service';
constructor(private sessionHelperService: SessionHelperService) {
}
getCurrentSession() {
const session = this.sessionHelperService.get(true);
}
SessionHelperService
import { WindowDetailsService } from '../pkg/session/window-details.service';
constructor(private windowDetailsService: WindowDetailsService) {
}
windowOperations(windowType: String) {
Switch(windowType) {
case 'Cordova':
if (shouldCloseWindow) {
this.windowDetailsService.setReadyToClose(true);
if (closeSession) {
this.closeUserSession(closeSession)
.finally(this.windowDetailsService.closeCurrentwindow);
} else {
this.windowDetailsService.closeAllWindows();
}
}
break;
case 'Web':
break;
case 'Electron':
break;
}
}
我得到的错误是
Warning: Circular dependency detected: session-helper.service.ts -> window.details.ts -> session-helper.service.ts
Warning: Circular dependency detected: window-details.service.ts -> session-helper.service.ts -> window-details.service.ts
我无法从 SessionHelperService 中取出 Window-details 的代码,因为它不仅包含 Cordova 窗口类型的代码,还包含 Web 和 Electron 的代码。
现在我的问题是我无法从 SessionHelperService 中取出与 WindowDetailsService 相关的代码,反之亦然。由于这是一个大 项目,如果我对此进行更改,它将影响项目中的许多其他相关文件。请建议我该怎么做
解决方法
尝试使用 Injector 服务以这种方式获取 SessionHelperService
:
WindowDetailsService:
import { Injector } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ...
private sessionHelperService: SessionHelperService
/**
* Constructor
*/
constructor(private injector:Injector) {
}
getCurrentSession() {
this.sessionHelperService = injector.get(SessionHelperService));
const session = this.sessionHelperService.get(true);
}
,
另一种方法是创建例如 x 服务文件并导入您的 SessionHelperService 和 WindowDetailsService,这样您的所有服务都可以正常工作而不会出现循环依赖错误