【问题标题】:Angular, provider or injector, which one creates a service instanceAngular、provider 或 injector,哪一个创建了一个服务实例
【发布时间】:2018-10-24 07:59:49
【问题描述】:

在 Angular 文档中, where say "provider create a service instance",

在 Angular 可以将 HeroService 注入到 HeroesComponent 之前,您必须使依赖注入系统可以使用 HeroService,如下所示。您可以通过注册提供者来做到这一点。 提供者是可以创建或提供服务的东西;在这种情况下,它会实例化 HeroService 类来提供服务。

但是this say "injector create a service instance"

注入器负责创建服务实例,并将它们注入到 HeroListComponent 等类中。

所以,在阅读了文档之后,我有一个问题是哪个会创建服务实例、提供者或注入器?

这个问题让我很困惑。提前致谢。

【问题讨论】:

  • 快进到解释DI in angular的部分
  • 然后检查Hierarchical DI
  • 您还可以阅读已弃用的反射式注入器和当前的静态注入器以获得更深入的了解。
  • Provider 使用注入器来注入/提供服务。

标签: angular document


【解决方案1】:

我的理解是,使用 NgModule 的 providers 数组实际上是在创建一个提供程序。

例如,看看提供者覆盖:

providers: [{ provide: MyService, useClass: MyServiceMock }]

如您所见,您确实是从该数组创建了一个提供程序。

我想以“标准”方式编写它只是创建提供程序的捷径。

另一方面,注入器是创建类实例的那个,它将作为依赖项注入到你的特性中。

换句话说,提供者将是用@Injectable 装饰的服务,而注入器将是调用new MyService() 的服务。

(再次,不确定我的解释,这就是我自己得到的)。

【讨论】:

    【解决方案2】:

    当你想使用一项服务时,你需要的东西很少。

    1) 创建服务
    2) 在您希望将其作为依赖项注入的组件中获取它。
    3) Angular 实例化服务的唯一方法是您向 Angular “提供”一些指令。这就是您在提供程序中所做的。

    A provider is an instruction to the DI system on how to obtain a value for a dependency. Most of the time, these dependencies are services that you create and provide.

    在下面的 Angular 文档中的这个链接中看到这个: https://angular.io/guide/providers

    【讨论】:

      【解决方案3】:

      IMO 你可以看到 3 个区块

      • 喷油器
      • 提供者
      • 工厂

      作为简单的便便,工厂实例化一个类(您的服务),您的提供者在这里选择使用哪个工厂,真正的类工厂或模拟,而注入器只是决定使用提供者的 DI

      所以在“组件”级别,是的,它是“实例化”您的服务的注入器,只是为了澄清您没有自己添加它。

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 2019-06-21
        • 2018-06-02
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多