首页 > 解决方案 > 注入服务的构造函数何时运行?

问题描述

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

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

标签: angulartypescriptangular7

解决方案


用装饰器装饰的类的构造函数在Injectable某个范围的注入器初始化该类/服务时被调用。您不能在一个范围内拥有同一服务的多个实例,除非您通过通过{ provide: MyService, useClass: MyService, multi: true }.

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


推荐阅读