Angular 5 - 如何在分层体系结构中创建单个服务实例?

时间:2018-04-08 00:37:03

标签: rxjs observable angular5

我创建了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]   不再是唯一的,我的订阅者在组件和其他   地方根本没有得到通知。

有人可以建议我如何使用分层架构,但仍然创建了每个服务的一个实例!

0 个答案:

没有答案