为什么我在 2 个模块中注入服务是单例模式?

Why I inject service in 2 modules is Singleton Pattern?

以下是文件情况

AppService
AppModule
    AModule
        AComponent
    BModule
        BComponent

关于Service,我知道如果我在两个组件中注入一个Service,angular会生成2个不同的服务对象,服务的数据不能共享。如果我在名为 Singleton PatternAppModule 中注入 Service,该服务将共享数据。

但是,如果在 AmoduleBModule 中注入 Service 会怎么样?我认为结果与注入组件相同。但事实是Singleton Pattern

为什么? Service 被注入到两个不同的模块中,我想 angular 应该在 2 个模块中生成 2 个服务对象。谁能帮我弄清楚?谢谢。

StackBlitz 链接是 angular-service-inject-modules

我创建了一个演示程序,它会输出随机数来检查服务是否 Singleton Pattern

当您在模块中提供服务并再次重新导入时,它在整个应用程序中都可用。您可以通过注释掉 moduleB 中的 providers = [AppService] 来验证这一点,并看到与之前相同的结果。

在每个单独的组件中提供服务,然后您可以看到注入了一个新的服务实例,如 working stackblitz 中所示。


根据评论,如果您不想在您的应用程序中注入单例服务,您可以完全省略 DI 并在每个组件中创建一个新的服务实例。

constructor() { this.random = new AppService().random; }