我正在编写Angular软件包,其中将提供基本功能,并允许用户根据需要扩展它以进行自定义。基本组件包括一些我将在内部使用的服务。因此,当我在应用程序中扩展此组件时,会出错,因为它需要使用内部使用的服务作为参数的super()调用。
我在Angular GitHub存储库上检查了此问题(https://github.com/angular/angular/issues/5155),该问题建议使用'Injector'将服务注入基本组件,但这似乎不是正确的方法。对于这种情况是否有更好的结构。
基本组件
Component({
selector: 'base-comp',
template: `
<p>
base-comp works
</p>
`,
styles: []
})
export class BaseComp implements OnInit {
constructor(private someservice: SomeService,
private anotherService: AnotherService
) {
}
}
子组件
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent extends BaseComp {
constructor(private localService: LocalService) {
super(); // this gives error
}
}
我希望子组件继承而不在构造函数的super()调用中传递所有依赖项。
答案 0 :(得分:0)
我希望子组件继承而不传递所有依赖项 在super()构造函数中调用
如果最高层组件继承自DI,则消费者需要向下传播此DI。
如果您使用服务而非继承(即favour composition over inheritance),则可以实现您的功能而不会遇到依赖问题。
您还可以为依赖项实现factory pattern(再次作为服务),那么您只需要一次注入,而无需多次注入。