如何在父类中注入服务而不在构造函数中传递它?角度6

第224章

我想知道如何在抽象类中注入具有多个依赖项的服务,该类将被多个类扩展。

然后以一种更有效的方式将其传递给所有构造函数!

我尝试创建静态的,但是如果该服务从未被另一个实例化,则单例实例变量将永远不会被分配

这样的事情:(仅是示例)

@Injectable({
  providedIn: 'root'
})
export class AnimalService {

  constructor(private http: HttpClient, private userService: UserService) {}

  countTotalInDB(type): number {
    return this.http.get(...);
  }

  getUserAnimals(userId: number) {
    return this.userService.getUser(userId).animals;
  }

}

abstract class Animal {

  constructor() {}

  public getTotalInDataBase(type): number {
    // How to get a instance of AnimalService ?
    return animalService.countTotalInDB(type);
  }

}

export class Cat extends Animal {

  constructor() {
    super();
  }

  public getTotalInDataBase(): number {
    return super.getTotalInDataBase('cat');
  }

}

export class Dog extends Animal {

  constructor() {
    super();
  }

  public getTotalInDataBase(): number {
    return super.getTotalInDataBase('dog');
  }

}

const doggo = new Dog();

console.log(doggo.getTotalInDataBase());

在这种情况下,AnimalService将使用HttpClientUserService

UserService 将会使用更多的服务。

那么,如何获得一个看起来像这样的类实例化,该类实例化const doggo = new Dog();创建/使用/注入AnimalService而不在所有类中传递它?

第224章

我终于找到了解决方法。

按照我的示例:

import { inject } from '@angular/core'; // Answer

@Injectable({
  providedIn: 'root'
})
export class AnimalService {

  constructor(private http: HttpClient, private userService: UserService) {}

  countTotalInDB(type): number {
    return this.http.get(...);
  }

  getUserAnimals(userId: number) {
    return this.userService.getUser(userId).animals;
  }

}

abstract class Animal {

  protected animalService: AnimalService; // Answer

  constructor() {
    this.animalService = inject(AnimalService); // Answer
  }

  public getTotalInDataBase(type): number {
    // How to get a instance of AnimalService ?
    return this.animalService.countTotalInDB(type);
  }

}

export class Cat extends Animal {

  constructor() {
    super();
  }

  public getTotalInDataBase(): number {
    return super.getTotalInDataBase('cat');
  }

}

export class Dog extends Animal {

  constructor() {
    super();
  }

  public getTotalInDataBase(): number {
    return super.getTotalInDataBase('dog');
  }

}

const doggo = new Dog();

console.log(doggo.getTotalInDataBase());

它对我而言有效,希望对您也有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在静态类中注入服务而不在 angular 7 的子类中传递服务?

如何在导出的函数中注入服务?

在类构造函数中注入服务的长形式

如何在继承自基类需要注入服务的基类的类中编写类构造函数?

帅哥 如何在父类的字段中注入不同的对象?

Angular,无法在父类中注入服务

如何在构造函数中注入 lambda 方法?

如何在资源父类的构造函数中访问HttpServletRequest?

如何在AutoMapper配置文件类中注入服务

如何在Blazor类中注入服务(AuthenticationStateProvider)

如何创建一个类的实例并注入依赖项而不在DryIoc中注册它?

如何在可重用的Razor类库中的控制器中注入服务

如何在自定义类构造函数中注入单例并使用它| .NET Core 2

如何在Nest 6中注入HTTP服务器?

如何在Lua中注册C#类构造函数

如何在ES6中调用班级的父级的父级构造函数?

如何在watchOS6中注入.environmentObject()

将参数传递给PHP中的父类构造函数?

如何在子类构造函数中调用父构造函数?

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

使用在父组件中注入的服务调用子组件中的函数

如何使用 StructureMap 在构造函数中注入实现相同通用接口的所有类?

Spring-在Java配置类中注入构造函数参数

如何在方法中注入服务?

如何在Blazor中注入IUriHelper服务?

如何在服务中注入文件?

如何在组件中注入服务

如何在Tapestry服务中注入bean

如何在__contstruct中注入服务?