以下与其他模块的组件和服务相关的文档让我感到困惑。https://angular.io/guide/sharing-ngmodules#using-组件与来自其他模块的服务
我理解文档中所说的导入NgModule的典型用法是访问共享组件、管道和指令。
它还规定了以下内容:"导入带有服务的模块意味着您将拥有该服务的新实例,而这通常不是您所需要的(通常需要重用现有服务(。使用模块导入来控制服务实例化">
这就是我困惑的地方。我对DI系统的理解(至少在一个急切加载的应用程序中(是,如果您导入一个共享模块,其中的服务列为提供者,那么该服务最终将在根注入器中注册。NgModule导入的树在编译过程中被压平,每个服务提供者都在根注入器中注册。
这里的文档说";导入带有服务的模块意味着您将拥有该服务的新实例"。这不一定是真的。
我是不是遗漏了什么?当他们提到模块时,他们不是指NgModule吗?
如果导入一个共享模块,其中的服务被列为提供者,那么该服务最终将在根注入器中注册
有了可注入装饰器中的新选项provideIn,在任何地方使用provideIn都更高效,因此您可以将服务文件放在任何需要的地方,而不是在模块中提供它们。
请检查此url以了解有关提供商和此选项的更多信息:https://angular.io/guide/providers
在这里,您可以使用provideIn选项并查看注入范围:https://stackblitz.com/edit/angular-dp1ucw?file=src/app/user.service.ts