如何在Angular中将一个功能模块中的服务注入到另一个服务中



我有一个名为MyModule的功能模块,它提供了一个名称为ModalsService的服务,我想将此ModalsService注入另一个名称ApiService的服务,该服务属于我的主应用程序,并标记为在根中提供

@Injectable()
export class ModalsService { ... }
@NgModule({
providers: [
BetterModalsService
]
})
export class MyModule { }
@Injectable({
providedIn: 'root'
})
export class ApiService {
constructor(
private modalsService: ModalsService
) { }
...
}

一切都编译得没有错误,但在尝试从ApiService调用ModalsService服务时,我得到一个未定义this.modalsService的错误。我还将ModalsService服务注入到主应用程序的一些组件中,该组件按预期工作。这让我相信存在一些我不理解的依赖注入技巧。

我尝试在app.module.ts中使用providers: [ApiService],而不是providedIn: 'root',但这没有什么区别。如有任何帮助,我们将不胜感激。

您的ApiService运行良好,因为它的装饰器@Injectable中有{ providedIn: 'root' }。类(服务(的实例是根据Singleton模式创建的(整个应用程序的一个实例(。

ModalsService服务仅在我们的一个模块MyModule中提供。在这种情况下,如果我们将服务实例的模块导入ApiService所在的模块,就会创建一个服务实例,并使用它。

因此,您有两个解决方案:

  1. ModalsService(MyModule(的模块导入ApiService的模块,它应该可以工作
  2. ModalsService的decorator中设置{ providedIn: 'root' }。但我不建议这样做,这不是最好的做法。我们只在特殊情况下使用它

我认为这应该对你有所帮助。

相关内容

最新更新