角度服务中的注入服务的构造函数何时开始运行?

时间:2018-11-23 10:11:20

标签: angular typescript angular7

在Angular 7中,如果我们有一个声明为@Injectable({providedIn:'root'})的服务,它的构造函数何时执行?它是在构造使用它的组件(作为依赖项)时执行还是要等到首次调用该服务中的方法后才执行?

注意: 由于该服务是单例,因此我使用该服务的构造函数来初始化一些值。我可以创建一个“ Initialize()”方法,然后在组件的构造函数中调用它,但是我发现此方法有些混乱。

1 个答案:

答案 0 :(得分:1)

Injectable装饰器修饰的类的构造函数由某个作用域的注入器在初始化该类/服务时调用。除非您通过{ provide: MyService, useClass: MyService, multi: true }提供服务来强制使用同一服务,否则在一个作用域内不能有同一服务的多个实例。

provideIn选项定义服务所属的范围,因此使用provideIn: 'root'告诉DI通过RootInjector注入服务。而且,由于服务不会在一个范围内被多次初始化,因此当DI首次需要将该服务注入到另一个组件/服务/模块中时,该服务的构造函数仅被调用一次。