Это потому, что BaseReqestOptions
использует @Injectable
, в случае которого вместо конструктора подкласса вызывается конструктор BaseRequestOptions
. Таким образом, вы можете либо:
Используйте фабрику
providers: [{
provide: RequestOptions,
deps: [ Config ],
useFactory: (config: Config) => {
return new DefaultRequestOptions(config);
}
}]
Это позволит создать на службе самостоятельно, без Угловая пытается внедрить его. Или вы могли бы
Продлить RequestOptions
вместо
@Injectable()
class DefaultRequestOptions extends RequestOptions {
constructor(public config: Config) {
super({method: RequestMethod.Get, headers: new Headers()})
this.headers.append('data', this.config.data);
}
}
RequestOptions
не украшен @Injectable
. И если вы посмотрите на the source code for BaseRequestOptions, вы увидите, что все это делает то же самое, что мы делаем выше (с вызовом super
).
мне нужно вводить здесь свой собственный AuthService также поставить JWT маркер
Вы должны быть осторожны с этим, если AuthService
впрыскивает Http
. Вы можете получить ошибку циклической зависимости (потому что Http
использует RequestOptions
, а ваш RequestOptions
нуждается в Http
). Один из способов справиться с этим - ввести Injector
, а не Http
в услугу. Затем только get
Http
от Injector
.