我的层次结构如下。
Component1
Component2
component3
可以使用此层次结构,或者用户可以单独使用component2或component3。 每个组件都将注入AggregatorService。
我想注入聚合服务,以便检查父服务是否存在,它应该使用该服务实例而不是创建新实例。
如果单独使用它,它应该获得服务的新实例。
我知道如果我们想要最接近注射的偏好,它就有效。
但我怎样才能实现这一目标呢?
答案 0 :(得分:0)
您可以使用constructor(@Optional() private service?:AggregatorService) {
if(!this.service) {
this.service = new AggregatorService();
}
}
new
或避免使用@Component({
selector: '...',
providers: [{provide: 'myAggService', useClass: AggregatorService}],
})
constructor(@Optional() @SkipSelf() private service?:AggregatorService, @Inject('myAggService') myAggService:AggregatorService) {
if(!this.service) {
this.service = myAggService;
}
}
A
一个小缺点是,这里总是创建一个自己的实例, 但如果收到来自父母的一封,则丢弃。