启用 ivy 时的角度循环依赖

tha*_*guy 7 circular-dependency angular angular-ivy

在我的 angular 项目中启用 ivy 后,一切都会编译,但是在浏览器中启动应用程序时,我在应用程序引导期间收到以下错误:

Error: Cannot instantiate cyclic dependency! ApplicationRef
    at throwCyclicDependencyError (core.js:5208)
    at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.hydrate (core.js:11763)
    at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.get (core.js:11590)
    at injectInjectorOnly (core.js:648)
    at ??inject (core.js:653)
    at injectArgs (core.js:730)
    at Object.factory (core.js:11858)
    at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.hydrate (core.js:11767)
    at R3Injector.push../node_modules/@angular/core/__ivy_ngcc__/fesm5/core.js.R3Injector.get (core.js:11590)
    at injectInjectorOnly (core.js:648)
Run Code Online (Sandbox Code Playgroud)

我正在努力找出循环依赖的位置以及为什么在不使用常春藤时它可以正常工作。我尝试使用 madge (madge --circular --extensions ts ./) 但没有找到循环依赖。

编辑:我已经手动浏览了所有服务并验证它们之间没有循环依赖

tha*_*guy 3

事实证明,在我的 app.module 提供程序中,我在 @Injectable() 中有一个带有 {provideIn: 'root'} 的类,删除它修复了它。

providers: [
    { provide: ErrorHandler, useClass: AppErrorHandler }
]
Run Code Online (Sandbox Code Playgroud)

@Injectable({ providedIn: 'root' })
export class AppErrorHandler implements ErrorHandler {
Run Code Online (Sandbox Code Playgroud)

@Injectable()
export class AppErrorHandler implements ErrorHandler {
Run Code Online (Sandbox Code Playgroud)

我不知道为什么在 ivy 之前这不是问题,即使有了 AoT