私のアプリでは、いくつかのヘッダーを追加する独自の実装で Angular Http クラスを拡張しました。
export class Secure_Http extends Http {
private getJwtUrl = environment.employerApiUrl + '/getJwt';
private refreshJwtUrl = environment.employerApiUrl + '/refreshJwt';
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, private storage: SessionStorageService) {
super(backend, defaultOptions);
}
次に、app.mobule.ts ファイルでこれを行ったので、基本バージョンの代わりに安全なバージョンが常に使用されます。
@NgModule({
declarations: [
AppComponent
],
imports: [
....
],
providers: [
....
SessionStorageService,
{
provide: Http,
useFactory: secureHttpFactory,
deps: [XHRBackend, RequestOptions, SessionStorageService]
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
export function secureHttpFactory(backend: XHRBackend, options: RequestOptions, sessionStorage: SessionStorageService) {
return new Secure_Http(backend, options, sessionStorage);
}
現在、私たちのサービスでは、標準のコンストラクター/DI アプローチを使用しています。
@Injectable()
export class MySecurityService {
employerApiBaseUrl: string = environment.employerApiUrl;
constructor(private _http: Http) { } //, private _secureHttp: Secure_Http
getUser() : Observable<User> {
this.log('getUser', 'getting the current user');
var thisUrl = this.employerApiBaseUrl + '/jwt/userinfo';
var searchParam = {
jwt: this.getToken()
};
return this._http.post(thisUrl, searchParam)
.map((response: Response) => this.extractGetUserResponse(response))
.catch(this.handleError);
}
}
ここで私の問題は、JWT を取得するために必要な関数が 1 つあるため、SecurityService は Secure_Http クラス/サービスも注入する必要があることです。
しかし、コンストラクターのパラメーターとして Secure_Http クラス/サービスを追加するとすぐに、エラーが発生しますNo provider for Secure_Http
。
したがって、次に考えることは、app.module.ts ファイルの providers セクションに Secure_Http を追加することです。これは、Http が Secure_Http を使用する必要があると指定した場所のすぐ隣にあります。しかし、それを行うとすぐに、エラーが発生しますNo provider for ConnectionBackend
。向きを変えてプロバイダーに追加ConnectionBackend
すると、@NgModule にエラーが表示されますType 'typeof ConnectionBackend' is not assignable to type provider
。
ここでどこが間違っていますか?Secure_Http クラスに直接アクセスする必要があるメソッドが 1 つだけあります。これは、ポスト呼び出しの 1 つのパラメーターである必要があるため必要です。パラメータがすでに渡されているため、Secure_Httpサービス/クラスから呼び出すことはできません...