angular4中的分层依赖注入

时间:2017-09-08 13:08:19

标签: angular

我的层次结构如下。

Component1
    Component2
        component3

可以使用此层次结构,或者用户可以单独使用component2或component3。 每个组件都将注入AggregatorService。

我想注入聚合服务,以便检查父服务是否存在,它应该使用该服务实例而不是创建新实例。

如果单独使用它,它应该获得服务的新实例。

我知道如果我们想要最接近注射的偏好,它就有效。

但我怎样才能实现这一目标呢?

1 个答案:

答案 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

一个小缺点是,这里总是创建一个自己的实例, 但如果收到来自父母的一封,则丢弃。