Angular 模块文档混乱

Angular 模块文档混乱,angular,dependency-injection,angular-services,ng-modules,Angular,Dependency Injection,Angular Services,Ng Modules,我对以下与其他模块的组件和服务相关的文档感到困惑。 我理解文档中所述,导入NgModule的典型用途是访问共享组件、管道和指令 它还声明如下: 导入带有服务的模块意味着您将拥有该服务的新实例,这通常不是您所需要的(通常是希望重用现有服务)。使用模块导入来控制服务实例化 这就是我困惑的地方。我对DI系统的理解(至少在一个急切加载的应用程序中)是,如果您导入一个共享模块,其中一个服务被列为提供者,那么该服务最终将在根注入器中注册。在编译期间,NgModule导入的树被展平,并且中的每个服务提供者都

我对以下与其他模块的组件和服务相关的文档感到困惑。

我理解文档中所述,导入NgModule的典型用途是访问共享组件、管道和指令

它还声明如下: 导入带有服务的模块意味着您将拥有该服务的新实例,这通常不是您所需要的(通常是希望重用现有服务)。使用模块导入来控制服务实例化

这就是我困惑的地方。我对DI系统的理解(至少在一个急切加载的应用程序中)是,如果您导入一个共享模块,其中一个服务被列为提供者,那么该服务最终将在根注入器中注册。在编译期间,NgModule导入的树被展平,并且中的每个服务提供者都在根注入器中注册

这里的文档说明“导入带有服务的模块意味着您将拥有该服务的新实例”。这不一定是真的

我是不是遗漏了什么?当他们提到模块时,他们不是指NgModule吗

如果导入的共享模块中包含一个列为提供程序的服务,则该服务最终将在根注入器中注册

使用可注入装饰器中的新选项provideIn,在任何地方使用provideIn都会更加高效,因此您可以将服务文件放在任何地方,而不在模块中提供它们

检查此url以了解有关提供商和此选项的更多信息:


在这里,您可以使用provideIn选项并查看注入范围:

谢谢您提供的信息。它不一定回答我最初的问题,但是关于使用提供者导入模块和“使用服务导入模块意味着您将拥有该服务的新实例”的语句。虽然您可以在可注入装饰器中使用providedIn,但从技术上讲,您仍然可以使用提供程序导入NgModules。