我有三门课:
@Injectable()
export class ApiService {
constructor(public http: Http) {}
get(url: string) {
return http.get(url);
}
}
@Injectable()
export abstract class BaseService {
constructor(protected serv: ApiService) {}
}
@Injectable()
export class MediaService extends BaseService {
// Why do we need this?
constructor(s: ApiService) {
super(s)
}
makeCall() {
this.serv.get("http://www.example.com/get_data")
}
}
在 Angular2 中,我必须包含 BaseService 的构造函数andMediaService 即使 MediaService 继承了 BaseService。
如何在不将 Angular2 注入到 MediaService 的构造函数中的情况下将其注入到 BaseService 中?
现在,我拥有根据 ApiService 扩展 BaseService 的所有类,同时它们继承自 BaseService。
如果你想通过 DI 传入它,你必须使用构造函数。构造函数不是继承的,因此您需要在每个子类中实现构造函数,并通过调用将参数传递给超类构造函数super(arguments)
。
唯一的例外是没有任何参数的默认构造函数,它们是自动生成的。
你能做的就是注入Injector
并将其转发给超类请求的超类Http
来自Injector
势在必行。如果您注入多个服务,这可能是一个优势,因为您只需声明一个构造函数参数,但在我看来,这使得推理代码变得更加困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)