谁有责任在 Angular 中实例化“后台”服务?

问题描述 投票:0回答:1

我正在关注服务工作者的 Angular 文档 (https://angular.io/guide/service-worker-communications)。该页面列出了一系列用于处理 Service Worker 生命周期处理程序(更新、失败的生命周期等)的服务示例。

我对这些服务的生命周期感到困惑,它们中的每一个都在项目的根部注册,并在其构造函数中订阅 Angular 的

SwUpdate
,但如果我理解正确的话构造函数将不会被调用,除非我将这些服务中的每一个注入到组件中

要明确的是:如果我尝试从服务的构造函数将消息记录到控制台,我就看不到这些日志即使

@Injectable
装饰器是通过
providedIn: 'root'
选项
传递的,但如果我明确地在项目的引导程序组件中实例化服务,打印日志。

那么“后台服务”是什么意思呢?我的意思是 项目中的任何组件未显式导入的服务,但仍应实例化(在本例中是将一些事件侦听器附加到不同的服务)。

我应该在项目的引导组件中注入后台服务吗? 在至少一个组件中注入“后台”服务是 Angular 中的一种常见做法,还是有其他方法可以实例化它们?

(这是一个非常简单的 stackblitz,其中包含我的意思的示例:https://stackblitz.com/edit/stackblitz-starters-gnucr3?file=src%2Fmain.ts)。

angular dependency-injection angular-services angular-dependency-injection
1个回答
0
投票

除非我将这些服务中的每一个注入到组件中,否则构造函数不会被调用

事实上,只有当您告诉注入器提供该服务时,服务才会被实例化。您可以通过多种方式做到这一点:

  • providedIn: "root"
    装饰器中设置
    @Injectable
    更多信息),或者
  • 在引导应用程序时注册提供程序(更多信息,或
  • 在引导组件中注册提供者
© www.soinside.com 2019 - 2024. All rights reserved.