gpt4 book ai didi

Angular 将服务注入(inject)基类而不是子类,并在子类中使用父服务

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:37 24 4
gpt4 key购买 nike

使用 Angular 7 和 Typescript:我有一个使用大量服务和子类(大约 40 个子类)的基类,我不想在所有子类构造函数中添加这些服务并将它们传递给 super() 但我仍然需要在所有子类中使用这些服务。


export class parentTool {

constructor(type: string, public service1: Service1, public service2: Service2,public service3: Service3, public service4: Service4){}
}

export class ChildTool1 extends parentTool {

constructor(public service1: Service1, public service2: Service2,public service3: Service3, public service4: Service4) {

super("tool1", service1, service2, service3, service4);
}
}

export class ChildTool2 extends parentTool {

constructor(public service1: Service1, public service2: Service2,public service3: Service3, public service4: Service4) {

super("tool2", service1, service2, service3, service4);
}
}

最佳答案

我曾经遇到过同样的问题,所以我最终使用 injector 服务进行手动 DI(依赖注入(inject))

此静态类用于存储注入(inject)器服务的引用

export class AppInjector {

private static injector: Injector;

static setInjector(injector: Injector) {
AppInjector.injector = injector;
}

static getInjector(): Injector {
return AppInjector.injector;
}
}

在应用程序模块我设置了 injoctor 服务

export class AppModule { 
constructor(injector:Injector){
AppInjector.setInjector(injector);// save a injector ref 💾
}
}

you need to store the service before you start do any DI (dependency injection)

在基础组件中

export class BaseComponent {
protected utilitiesService: UtilitiesService; // 👈 service
protected loggingService: LoggingService; // 👈 service

constructor() {

const injector = AppInjector.getInjector();

this.utilitiesService = injector.get(UtilitiesService); // 🌟 DI
this.loggingService = injector.get(LoggingService); // 🌟 DI


}

}

子类现在可以访问注入(inject)器类注入(inject)的所有服务 🎉🎉

    export class ChildComponent extends BaseComponent {
constructor() {
super();
}
}

demo 🔥🔥

关于Angular 将服务注入(inject)基类而不是子类,并在子类中使用父服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748951/

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