角,提供者或注入者,它们创建一个服务实例

时间:2018-10-24 07:59:49

标签: angular document

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

  

您必须使HeroService可用于依赖项注入系统,然后Angular才能将其注入HeroesComponent,如下所述。您可以通过注册提供者来实现。 提供者是可以创建或提供服务的东西 ;在这种情况下,它将实例化HeroService类以提供服务。

但是this say "injector create a service instance"

  

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

因此,在阅读文档之后,我有一个问题是哪个将创建服务实例,提供者或注入者?

这个问题使我很困惑。预先感谢。

3 个答案:

答案 0 :(得分:0)

据我所知,使用NgModule的providers数组实际上是在创建提供程序。

例如,查看提供者优先级:

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

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

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

另一方面,注入器是创建类实例的注入器,它将作为依赖项注入到您的要素中。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

IMO,您可以看到3个方块

  • 注射器
  • 提供者
  • 工厂

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

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