customInterceptor.js
counter = 0;
constructor() {
console.log('interceptor : '+this.counter);
}
日志
用于登录请求: example.com/users
interceptor : 0
interceptor : 1
interceptor : 2
interceptor : 3
注销并再次登录: example.com/users
interceptor : 10
interceptor : 11
interceptor : 12
interceptor : 13
试图找出我是否创建了多个拦截器实例,我从
调用了它app.module.ts
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: customInterceptor,
multi: true,
}],
http.service.ts
counter = 0;
req_counter = 0;
constructor(private injector: Injector) {
console.debug(this.counter++, injector.get(HTTP_INTERCEPTORS);
}
get(url: string, options){
console.debug(req_counter++.concat(' : ', url);
...
}
答案 0 :(得分:2)
通常,否。您看到的可能是因为依赖注入的工作方式。它们是拦截器并没有多大关系,它会在每种服务中发生。
拦截器是您需要提供的服务。如果您多次提供它们,则将在需要使用它们时创建多个实例。
确保仅在主NgModule(通常命名为AppModule
)中执行以下操作:
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MyInterceptor,
multi: true
},
]
如果您在同一拦截器(MyInterceptor
)的不同模块上多次执行此操作,则会得到多个实例(如您所描述的,构造函数将被多次调用)。