我创建了BaseService,CommonService,如下所示,我的其他服务依赖于此层次结构。我的主要目的是在我的所有ModuleServices中重用utilService和cacheService [有很多ModuleServices]。
export abstract class BaseService {
public utilService: UtilService;
_listingSubject = new ReplaySubject();
public listingObservable: Observable<QuickList> = this._listingSubject .asObservable();
constructor() {
super();
this.utilService = ServiceLocator.injector.get(UtilService);
}
}
export class CommonService extends BaseService {
public cacheService: CacheService;
constructor() {
super();
this.cacheService = ServiceLocator.injector.get(CacheService);
}
}
export class ModuleServiceA extends CommonService {
constructor() {
super();
}
}
我在AppModule的Providers列表下声明了我的服务 - 没有 在组件级别注入
@NgModule({
providers: [CommonService, ModuleServiceA..]
...
})
export class AppModule {}
我无法直接在构造函数中注入,如下所示,这将强制所有子服务也使用所有参数声明。我想避免的。
constructor(public cacheService: CacheService)
但是,在上面的分层体系结构中,正如在每个子服务中调用super()构造函数一样,会创建一个新的BaseService / CommonService实例 - 从而破坏了基本目的。
另外,Observable在BaseService中创建[listingObservable] 不再是唯一的,我的订阅者在组件和其他 地方根本没有得到通知。
有人可以建议我如何使用分层架构,但仍然创建了每个服务的一个实例!