我有两个模块 - 让我们称它们为模块-E和模块-P。我在module-E中有一个服务,比如service-E,它有多种方法。我想在模块-P中使用service-E的所有功能,除了一些函数,所以我从service-E扩展了service-P并在服务-P中覆盖了这些函数。
在模块-E中,提供者声明是
providers: [service-E]
在模块-P中,提供者声明是
providers: [{provide: service-E, useClass: servie-P}]
问题是如果我首先加载module-P,我甚至在模块E中得到service-P,如果我首先加载module-E,那么我在模块-P中获得service-E。
无论如何,我想将service-P限制为module-P,将service-E限制为module-E.
答案 0 :(得分:0)
为什么不使用模块?
@NgModule({
providers: [serviceE]
})
export class ServiceEModule {}
@NgModule({
imports: [ServiceEModule],
})
export class PModule {}
您甚至不必使用此逻辑声明两次,所有业务逻辑都是集中的。
答案 1 :(得分:0)
您无法限制它们,因为所有服务共享同一个注入器,因此无论何时加载服务(例如从延迟加载的模块),该服务都将全局可用。
来源:https://medium.com/@michelestieven/organizing-angular-applications-f0510761d65a
答案 2 :(得分:0)
模块中提供的服务已在根注入器中注册。因此,您获得的第一个实例将在整个应用程序中共享。
但是,如果模块是延迟加载的,它们将为每个模块都有一个单独的实例。
参考:https://angular.io/guide/dependency-injection#injectable-ngmodule-or-component