tl; dr: Как я могу запретить Angular внедрять пользовательскую реализацию HttpClient в модули более низкого уровня?Вместо этого я хочу использовать стандартную реализацию (например, без перехватчиков), которая поставляется с Angular.
Я создал библиотеку Angular 6 с Angular CLI.Эта библиотека также экспортирует модуль и сервис, которые предоставляют мне функциональность управления идентификацией (самостоятельно) и используют HttpClientModule для отправки запросов на сервер API.
В моих приложениях я ссылаюсь на эту библиотеку (через частный npm).упаковка), которая отлично работает.
Недавно я наткнулся на HttpInterceptors, чтобы расширить функциональность до уже существующего HttpClient из стартового комплекта ракеты ngx.Вы можете найти код для реализации HttpClient здесь: https://github.com/ngx-rocket/starter-kit/blob/master/src/app/core/http/http.service.ts
Когда я предоставляю свою собственную реализацию HttpClient в массиве provider моего модуля приложения, кажется, что из-за внедрения иерархической зависимости Angular моябиблиотека также будет использовать предоставленную пользовательскую реализацию, даже если я этого не хочу.
Итак, мой вопрос: Как я могу запретить Angular внедрять пользовательскую реализациюHttpClient в модулях более низкого уровня?Вместо этого я хочу использовать стандартную реализацию (например, без перехватчиков) в модулях более низкого уровня.
То, что я уже пробовал, предоставляет
{ provide: HttpClient, useValue: HttpClient }
в моей службе пользователя (пожалуйста, найдитекод ниже), который не работает.
Этот код находится внутри моего приложения:
app.module.ts
/* other module code */
imports: [
UserModule
],
providers: [
{ provide: HttpClient, useValue: MyOwnHttpClientImplementation }
]
/* other module code */
Этот кодвнутри библиотеки:
user.module.ts
/* other module code */
imports: [
HttpClientModule
/* At this point, I want to use the standard HttpClient implementation */
],
providers: [
UserService,
{ provide: HttpClient, useValue: HttpClient }
]
/* other module code */
user.service.ts
/* Here are standard HttpClient .get requests, which unfortunately
use the interceptors that are being provided by the application that
uses the library and the user module / service */