這是一個界面:
interface Service {
make(): void;
get(): any;
}
以及實作此合同的兩個服務:
class Service1 implements Service {
constructor(private rootService: RootService) {}
make() {}
get() {}
}
class Service2 implements Service {
constructor(private rootService: RootService) {}
make() {}
get() {}
}
我需要在組件 A 和組件 B 中使用同名但實作不同的服務的具體實作:
class Component A {
constructor(private service: Service) {}
}
class Component B {
constructor(private service: Service) {}
}
考慮到服務具有依賴性,如何做到這一點:private rootService: RootService?
uj5u.com熱心網友回復:
理論上,您可以Service在組件級別為介面提供不同的實作(假設 Service1 和 Service2 是無狀態的)。
為了規避介面不能用作注入令牌的事實,您可以為此創建一個新的注入令牌:
export const MY_SERVICE = new InjectionToken<Service>('MY_SERVICE');
@Component({
// ...,
providers: [{
provide: MY_SERVICE,
useClass: Service1
}]
})
class Component A {
constructor(@Inject(MY_SERVICE) private service: Service) {}
}
// ...
@Component({
// ...,
providers: [{
provide: MY_SERVICE,
useClass: Service2
}]
})
class Component B {
constructor(@Inject(MY_SERVICE) private service: Service) {}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507203.html
標籤:有角度的
下一篇:反應控制的系結型別不正確
