在Angular文档中,
where say "provider create a service instance",
您必须使HeroService可用于依赖项注入系统,然后Angular才能将其注入HeroesComponent,如下所述。您可以通过注册提供者来实现。 提供者是可以创建或提供服务的东西 ;在这种情况下,它将实例化HeroService类以提供服务。
但是this say "injector create a service instance"
注入器负责创建服务实例 ,并将其注入到HeroListComponent等类中。
因此,在阅读文档之后,我有一个问题是哪个将创建服务实例,提供者或注入者?
这个问题使我很困惑。预先感谢。
答案 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
所以在“组件”级别上,是注入器“实例化”了您的服务,只是为了澄清您自己还没有点缀它。