在将我的延迟加载的服务注入拦截器时,我遇到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错误。但是,很奇怪,我的问题正在通过...