Angular - 在哪里提供服务?

Angular - where to provide services?

如果我想在一个模块中隔离服务,我应该为模块创建一个根组件,并在该组件上使用providers(as said docs)。

如果我在模块上使用 providers,服务 become application level. So, it is way to provide application-level services (as it made in example)。

但是,接下来,docs says:

Do not specify app-wide singleton providers in a shared module. A lazy loaded module that imports that shared module will make its own copy of the service.

所以,我们不应该使用providers的模块来提供共享服务。那么,我们应该使用什么?应用模块providers?我们应该在 AppModule 中提供所有共享服务吗?我们什么时候应该使用providers的功能模块?

看起来,模块提供程序是共享的,但您不应该将它们作为共享使用。 WTF?

Do not specify app-wide singleton providers in a shared module. A lazy loaded module that imports that shared module will make its own copy of the service.

这仅适用于延迟加载的模块。 non-lazy 加载模块中的提供程序始终添加到应用程序根范围。

延迟加载的模块有自己的根范围,因为根注入器以后不能修改(在初始化之后)。

要确保在根级别提供所有服务,请实施 forRoot() 方法并在那里提供服务。然后使用 imports: [MyModule.forRoot()]

AppModule 处导入服务

是Angularissue, that is still open