【问题标题】:Circular dependency in DI detected for ApplicationRef. How to fix it为 ApplicationRef 检测到 DI 中的循环依赖性。如何修复它
【发布时间】:2021-04-15 02:42:20
【问题描述】:

我是 Angular 的初学者,为此我尝试在应用程序中实现全局错误处理,我创建了 appErrorHandler 类并实现了 ErrorHandler,并在该类上注入了 Toast 服务,但它向我显示了上述错误。 AppErrorHandler 类。

  @Injectable()
 export class AppErrorHandler implements ErrorHandler {

constructor(private toastService: ToastrService) {}

handleError(error: any): void {
    this.toastService.error("An unexpected error","Error");
}    

}

应用模块

 providers: [
{ provide: ErrorHandler, useClass: AppErrorHandler },
MakeService
],
 imports: [
BrowserAnimationsModule,
  ToastrModule.forRoot(
  {
    timeOut: 6000,
   positionClass: 'toast-bottom-right',
   preventDuplicates: true,
  }
),
RouterModule.forRoot([
  
  {  path:'', component:HomeComponent },
  {  path:'vehicle-form', component:VehicleFormComponent },
  
]),

],

【问题讨论】:

  • 你是不是在AppErrorHandler@Injectable装饰器中缺少{providedIn: 'root'}
  • 没有区别
  • 我明白了……你有没有机会在 stackblitz 中复制这个东西?那真的很有帮助:)
  • 要处理这种情况,您可以使用两种方法 - 利用HttpInterceptor 例如:Example-HttpInterceptor - 创建因子方法例如:Resolve-Circular-Dependency

标签: angular asp.net-core dependency-injection angular10


【解决方案1】:

我有类似的问题,不要问我 wtf 并尝试添加此 hack(来源:https://github.com/ngneat/hot-toast/issues/70

在你的情况下:

@Injectable()
export class AppErrorHandler implements ErrorHandler {

constructor(@Inject(Injector) private readonly injector: Injector) {}

private get toastService() {
    return this.injector.get(ToastrService);
}

handleError(error: any): void {
    this.toastService.error("An unexpected error","Error");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-26
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多