Angular 9:注入惰性加载服务时的拦截器循环依赖性

问题描述 投票:0回答:1

在将我的延迟加载的服务注入拦截器时,我遇到Cannot instantiate cyclic dependency! InjectionToken HTTP_INTERCEPTORS错误。

但是,很奇怪,我的问题是通过在拦截器的服务注入中添加空的setTimeout(()来解决的。我想知道为什么会这样...

延迟加载的LanguageService

import { HttpClient } from '@angular/common/http';
@Injectable()

export class LanguageService {

  constructor(private http: HttpClient,
    private _translate: TranslateService) {
    this.getLanguages();
  }
// ....

<:import { Injectable, Injector } from '@angular/core'; import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http'; import { LanguageService } from '../app/blog/services/language.service'; @Injectable() export class LanguageInterceptor implements HttpInterceptor { private _languageService:LanguageService; constructor(private injector: Injector) { /* This way Works! setTimeout(() => { this._languageService = this.injector.get(LanguageService) })*/ setTimeout(() => { this._languageService = this.injector.get(LanguageService) }) } intercept(req: HttpRequest<any>, next: HttpHandler) {

拦截桶] ::

import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { LanguageInterceptor } from './lang-interceptor'; export const httpInterceptorProviders = [ { provide: HTTP_INTERCEPTORS, useClass: LanguageInterceptor, multi: true } ];
<< [共享模块

import { NgModule } from '@angular/core'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { HttpClient, HttpClientModule, HttpClientJsonpModule } from '@angular/common/http'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; import { httpInterceptorProviders } from 'src/utilities/interceptor-barrel'; import { ShareModule } from '@ngx-share/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http, '../assets/i18n/', '.json'); } const MODULES = [ HttpClientModule, HttpClientJsonpModule, CommonModule, RouterModule, ShareModule, FormsModule, ReactiveFormsModule ]; @NgModule({ imports: [ MODULES, TranslateModule.forRoot({ defaultLanguage: 'en', loader: { provide: TranslateLoader, useFactory: (HttpLoaderFactory), deps: [HttpClient] } }), ], exports: [ MODULES, TranslateModule ], declarations: [], providers: [ httpInterceptorProviders ], }) << [延迟加载的模块

 // ....
imports: [
        SharedModule
    ]
 // ....
 providers: [
        LanguageService
    ]

我面临无法实例化循环依赖的问题!将我的延迟加载的服务注入到拦截器中时,InjectionToken HTTP_INTERCEPTORS错误。但是,很奇怪,我的问题正在通过...

angular interceptor angular9
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.