Angular 角形6-罐';t在APP_初始化器上解析服务的所有参数

Angular 角形6-罐';t在APP_初始化器上解析服务的所有参数,angular,dependency-injection,Angular,Dependency Injection,我试图在APP_初始值设定项上加载我的设置,但编译器抛出错误,无法解析AppSettingService的所有参数。还尝试注入appSettingService构造函数,但编译器仍引发相同的错误 appsetingservice.service.ts import { AppSettings } from '../_models/appSettings'; import { BaseDataService } from '../base-data.service'; import { HttpC

我试图在APP_初始值设定项上加载我的设置,但编译器抛出错误,无法解析AppSettingService的所有参数。还尝试注入appSettingService构造函数,但编译器仍引发相同的错误

appsetingservice.service.ts

import { AppSettings } from '../_models/appSettings';
import { BaseDataService } from '../base-data.service';
import { HttpClient } from '@angular/common/http';

export class AppSettingsService extends BaseDataService {


appSettings: AppSettings;

constructor(private http: HttpClient) {
    super();
    this.appSettings = null;
    this.setDebugSettings();
}

setDebugSettings() {

    this.appSettings = new AppSettings({
        baseApiUrl: 'http://localhost:3000'
    });
}

load(): Promise<any> {
    return this.http
            .get('http://localhost:3000')
            .map((res: Response) =>  res.json())
            .toPromise()
            .then((data: any) => this.appSettings.baseApiUrl = 'http://localhost:3000')
            .catch( (err) => Promise.resolve());

  }
}
// factory method to get our config loaded at startup
export function configLoader(appSettingsService: AppSettingsService) {
  return () => appSettingsService.load();
 }
 providers: [
...,
AppSettingsService,
{
  provide: APP_INITIALIZER,
  useFactory: configLoader,
  deps: [AppSettingsService],
  multi: true
},
...

AppSettingsService
的依赖项为
HttpClient
,因此应将其标记为依赖项。尝试:

AppSettingsService,
{
  provide: APP_INITIALIZER,
  useFactory: configLoader,
  deps: [AppSettingsService, HttpClient],
  multi: true
},
还要确保导入了
HttpClientModule
,就像Suren指出的那样。

@ANMOL

试试这个-它将确保承诺在需要时得到解决,而不是在
toPromise()
-这发生在我身上,一开始并不明显:

 load(): Promise<any> {                                    
    const promise = new Promise((resolve, reject) => {                                    
        this.http
            .get('http://localhost:3000')
            .map((res: Response) =>  res.json())
            .subscribe((data: any) => {
                this.appSettings.baseApiUrl = 'http://localhost:3000';
                resolve();
                return data;
        },
        (err) => {
            console.log(err);
            reject();
        })             
    });

    return promise;
}
load():承诺{
const promise=新承诺((解决、拒绝)=>{
这是http
.get('http://localhost:3000')
.map((res:Response)=>res.json())
.订阅((数据:任意)=>{
this.appSettings.baseapirl='0http://localhost:3000';
解决();
返回数据;
},
(错误)=>{
控制台日志(err);
拒绝();
})             
});
回报承诺;
}

将其放入AppSettingsService的构造函数中

constructor(@Inject(forwardRef(() => HttpClient)) private http: HttpClient) 

我可以知道否决投票的原因吗?导入并提供httpclientModule后,错误仍然存在。