仅为服务检测到Angular 11 Circular Dependency



我有两个Angular服务,即WindowDetailsServiceSessionHelperService。现在,在我的WindowDetailsService代码中,我需要以下场景:

WindowDetailsService:

import { SessionHelperService } from '../pkg/session/session-helper.service';
constructor(private sessionHelperService: SessionHelperService) {
}
getCurrentSession() {
const session = this.sessionHelperService.get(true);
}

会话帮助服务

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详细信息的代码,因为它不仅包括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,这样您的所有服务都可以在没有循环依赖错误的情况下完成它们的工作

最新更新