当前位置 : 主页 > 手机开发 > 其它 >

继承和依赖注入

来源:互联网 收集:自由互联 发布时间:2021-06-19
我有一组angular2组件,应该都会注入一些服务.我的第一个想法是,最好创建一个超级类并在那里注入服务.然后我的任何组件都会扩展该超类,但这种方法不起作用. 简化示例: export class A
我有一组angular2组件,应该都会注入一些服务.我的第一个想法是,最好创建一个超级类并在那里注入服务.然后我的任何组件都会扩展该超类,但这种方法不起作用.

简化示例:

export class AbstractComponent {
  constructor(private myservice: MyService) {
    // Inject the service I need for all components
  }
}

export MyComponent extends AbstractComponent {
  constructor(private anotherService: AnotherService) {
    super(); // This gives an error as super constructor needs an argument
  }
}

我可以通过在每个组件中注入MyService并使用该参数进行super()调用来解决这个问题,但这肯定是某种荒谬的.

如何正确组织我的组件,以便他们从超类继承服务?

I could solve this by injecting MyService within each and every component and use that argument for the super() call but that’s definetly some kind of absurd.

这并不荒谬.这是构造函数和构造函数注入的工作原理.

每个可注入类都必须将依赖项声明为构造函数参数,如果超类也具有依赖项,则这些类也需要在子类的构造函数中列出,并通过super(dep1,dep2)调用传递给超类.

绕过注射器并获得依赖性势在必行具有严重的缺点.

它隐藏了使代码难以阅读的依赖关系.它违反了一个熟悉Angular2 DI如何工作的人的期望.它打破了离线编译,生成静态代码以替换声明性和命令性DI,以提高性能并减少代码大小.

网友评论