В настоящее время мне нужно создать два экземпляра одного класса для доступа к некоторым переменным внутри HttpInterceptor
. Есть ли способ разрешить поставщика только с одним экземпляром и позволяет мне использовать один и тот же класс перехватчика в обычном сервисе и в качестве перехватчика?
*. Module.ts
.
.
Providers:[
CustomInterceptor, // first class instance
{
Provide: HTTP_INTERCEPTORS,
UseClass: CustomInterceptor, // second class instance
multi: true,
}
],
.
.
http.service.ts
constructor(
interceptor: CustomInterceptor,
){}
interceptor.hasNext$.next(true);
CustomInterceptor.ts
hasNext$ = new BehaviourSubject(false);
Когда я вызываю перехватчик в http.service.ts
, я получаю доступ к первому CustomInterceptor
, в то время как мой запрос к httpClient является вторым экземпляром CustomInterceptor
. Поэтому мой hasNext$.next(true)
во http.service.ts
никогда не изменится во втором.
Кто-то предложил мне использовать,
Providers: [
CustomInterceptor,
{
provide: HTTP_INTERCEPTORS,
useValue: CustomInterceptor,
multi: true,
},
]
но приведенный выше код выдаст ошибку, потому что токен HTTP_INTERCEPTORS требует useClass и, насколько я понимаю, будет классифицировать экземпляр того же класса.
UPDATE
Только что нашел способ написать, чтобы обойти это.
http.service.ts
constructor(
@Inject(HTTP_INTERCEPTOS) protected interceptor: CustomInterceptor,
){}
interceptor.hasNext$.next(true);