如何在Angular中创建特定于服务的服务

时间:2019-05-27 15:59:42

标签: angular dependency-injection

我在Angular中有两个服务S1和S2

export class S1 {
    constructor(private s2: S2) {
    // ...
    }
}

我想创建仅适用于S1的S2实例(与对组件相同)

关于如何做到这一点的任何建议?

3 个答案:

答案 0 :(得分:1)

我不太确定我能得到你想要的东西,但让我将其分解如下:

  • 不可能在没有 的地方注入服务

您可以将服务注入到另一个服务中,如下所示:

@Injectable()

export class First {
}


@Injectable()

export class Second {

    constructor(@Inject(First) first:First){ 

    }
}

请注意,您必须在某处提供服务,并且默认情况下,您可以在app root

中提供它们

答案 1 :(得分:0)

我认为这是不可能的,因为装饰器“ @Injectable”仅添加了providerIn元数据,该元数据定义了哪些注入器通过将其与@NgModule关联来提供注入器。 (请参阅documentation

也许如果您共享一些具体的用例,我们可以看看是否还有其他解决方法,但是您的应用程序结构设计可能会短缺。

答案 2 :(得分:0)

  

我想创建仅适用于S1的S2实例(与对组件相同)

好吧,这就是您要做的。您可以在组件范围内提供S1和S2。

@Component({
    ...
    viewProviders: [ S1, S2 ]
})
export class MyComponent { ... }

这意味着S1和S2将是MyComponent子级可以访问的唯一实例。

S1的单个实例不可能接收到S2的另一个实例,因为您是在构造函数中定义依赖项。