我有两个模块 - 我们称它们为模块-E和模块-P。我在模块 E 中有一个服务,比如服务-E,它有多种方法。我想在模块 P 中使用服务 E 的所有功能,除了一些函数,所以我从服务-E 扩展了服务-P,并在服务-P 中覆盖了这些函数。
在模块 E 中,提供程序声明为
providers: [service-E]
在模块 P 中,提供程序声明为
providers: [{provide: service-E, useClass: servie-P}]
问题是如果我先加载模块 P,即使在模块 E 中我也得到服务 P,如果我先加载模块 E,那么我在模块 P 中得到服务 E。
无论如何,我想将服务P限制为模块P,将服务E限制为模块E。
您无法限制它们,因为所有服务共享同一个注入器,因此每当加载服务(例如从延迟加载模块(时,该服务将全局可用。
来源:https://medium.com/@michelestieven/organizing-angular-applications-f0510761d65a
模块中提供的服务向根注入器注册。因此,您获得的第一个实例将在整个应用程序中共享。
但是,如果模块是延迟加载的,则每个模块都有一个单独的实例。
请参考 : https://angular.io/guide/dependency-injection#injectable-ngmodule-or-component