我使用npm库。这个库包含带有承诺方法的类存储库,以从服务器获取数据:
export class MapRepository {
constructor(
readonly globalEvents: MapGlobalEvent,
baseWebApiUrl: string,
readonly userKey: string = null
) {}
getAllRegistry() {
return this.credentialFetch(this.webApi.registry)
.then((res) => res.ok && res.json())
.catch(catchRequestError([]));
}
}
我想加重此类,因此我要通过apRepository进行扩展。我需要它来替换使用Http客户端在RXJS可观察对象上的承诺。
export class CoreReonMapRepository extends MapRepository {
constructor(private http: HttpClient) {
super();// Here is problem
}
getAllRegistry(): Observable<any> {}
}
问题是,尽管MapRepository
库中已加载了参数,但我仍应再次在父构造函数中传递参数。我违反了规则,即顶级模块不应依赖于级别模块。
怎么解决呢?
库核心中的某个位置:
this.repository = new MapRepository(
this.globalEvents,
webApiUrl,
this.props.userKey
);
您别无选择。您可能需要所有参数,然后将它们转发给父级的构造函数
export class CoreReonMapRepository extends MapRepository {
constructor(
private http: HttpClient,
readonly globalEvents: MapGlobalEvent,
baseWebApiUrl: string,
readonly userKey: string = null
) {
super(globalEvents, baseWebApiUrl, userKey);
}
或者只是不对其进行扩展,而是创建实现与MapRepository相同的接口的装饰器/代理,因此,只需向其注入MapRepository的现有实例,而您其余的应用程序与新班
export class CoreReonMapRepository {
constructor(
private http: HttpClient,
private innerMapRepository: MapRepository
) {}
getAllRegistry() {
// do other stuff
return this.innerMapRepository.getAllRegistry()
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句