gpt4 book ai didi

angular - 使用 TypeScript 和 Angular 5 在抽象类中进行依赖注入(inject)

转载 作者:太空狗 更新时间:2023-10-29 18:24:12 25 4
gpt4 key购买 nike

我有 BaseComponent,它注入(inject)了一些依赖项。第一个依赖项 EntityService 是正确且必要的。

但是AnyOtherService只在抽象的BaseComponent内部使用。我不想将它注入(inject)到未使用它的 ChildComponent 中,而是只将它注入(inject)到 BaseComonent 中。

为什么我必须通过 ChildComponent 将它推向 BaseComponent?最好的解决方案是将其封装在 BaseComponent 中。

base.component.ts

export abstract class BaseComponent {
constructor(
protected entityService: EntityService,
// protected anyOtherService: AnyOtherService // @todo add this
) {
}
}

child.component.ts

@Component()
export class ChildComponent extends BaseComponent {

constructor(
private firstService: FirstService,
private secondService: SecondService,
protected anyOtherService: AnyOtherService // @todo remove this
) {
super(
firstService,
anyOtherService // @todo remove this
);
}
}

最佳答案

因此您可以将 Injector 传递给基础组件构造函数(UPDATE):

export abstract class BaseComponent {
protected anyOtherService: AnyOtherService;

constructor(
inject: Injector
protected entityService: EntityService,
// protected anyOtherService: AnyOtherService // @todo add this
) {
this.anyOtherService= inject.get(AnyOtherService);
}
}


@Component()
export class ChildComponent extends BaseComponent {

constructor(
inject: Injector,
private firstService: FirstService,
private secondService: SecondService
) {
super(
inject,
firstService
);
}
}

想法是在子组件中注入(inject) Injector 和一些提供者,并在不传递所有基类依赖项的情况下将其传递给父基组件。通过传递注入(inject)器,子类(组件)不需要注入(inject)父(基)类的所有依赖项并传递 throw super(dep1, dep2..., baseDep1...)。

Could you please explain in your answer, why it has to be like you've said with private inside child and protected inside parent?

我认为注入(inject)器 不应该是子类/基类的属性。如果是,错误会在您下面评论时抛出。错误是关于 BaseChild 类不能在它们的类中具有相同的属性。这就是为什么我们需要在构造函数中省略对 injector 的 private/protected 或任何 access modifier 的原因,也因为 Injector 仅在构造函数中需要手动注入(inject)我们在某些特定情况下需要这样的东西。

关于angular - 使用 TypeScript 和 Angular 5 在抽象类中进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com