在Angular 7中,如果我们有一个声明为@Injectable({providedIn:'root'})的服务,它的构造函数何时执行?它是在构造使用它的组件(作为依赖项)时执行还是要等到首次调用该服务中的方法后才执行?
注意: 由于该服务是单例,因此我使用该服务的构造函数来初始化一些值。我可以创建一个“ Initialize()”方法,然后在组件的构造函数中调用它,但是我发现此方法有些混乱。
答案 0 :(得分:1)
由Injectable
装饰器修饰的类的构造函数由某个作用域的注入器在初始化该类/服务时调用。除非您通过{ provide: MyService, useClass: MyService, multi: true }
提供服务来强制使用同一服务,否则在一个作用域内不能有同一服务的多个实例。
provideIn
选项定义服务所属的范围,因此使用provideIn: 'root'
告诉DI通过RootInjector注入服务。而且,由于服务不会在一个范围内被多次初始化,因此当DI首次需要将该服务注入到另一个组件/服务/模块中时,该服务的构造函数仅被调用一次。