Angular 在组件和依赖项注入中使用类

Angular 在组件和依赖项注入中使用类,angular,class,dependency-injection,Angular,Class,Dependency Injection,我使用Angular,有一个组件、一个类和一个服务 我的服务是一个@injectable类,在app.module.ts中设置良好 @Injectable() export class MyService { 我的类以依赖注入的形式获得服务 import { MyService } from '../services/myService'; export class MyClass { constructor( myService: MyService ) { 在组件构造函

我使用Angular,有一个组件、一个类和一个服务

我的服务是一个@injectable类,在app.module.ts中设置良好

@Injectable()
export class MyService {
我的类以依赖注入的形式获得服务

import { MyService } from '../services/myService';

export class MyClass {
  constructor(
    myService: MyService
  ) {
在组件构造函数中,我尝试创建我的类MyClass的新实例

export class MyComponent implements AfterViewInit {
  constructor(
  ) {
    const myClass = new MyClass();
  }
但我得到:“预期1个参数,但得到0”

所以我的问题是如何使用类和享受依赖注入?我发现这一点并不清楚

或者,我必须在我的组件构造函数中添加依赖项并将它们传递给我的类

也许有更好的混合方式


提前感谢,

在执行此操作之前,需要了解一些要点

1) 是否要与类和组件共享相同的服务实例

如果是,则可以在组件中“提供”服务,并将服务实例传递给类

@Component({
  selector: '',
  templateUrl: '',
  providers: [Provide your service here]
})
export class MyComponent implements AfterViewInit {
  constructor(serv: MyServ){
    const myClass = new MyClass(serv);
  }
}
请注意,如果您已经在模块中提供了服务,则无需在组件中再次提供服务。

这样做的好处是,您现在与类和组件共享同一个服务实例

2) 如果不想共享实例,只需在类构造函数中创建服务的新实例即可

import { MyService } from '../services/myService';

export class MyClass {
  constructor(myService: MyService = new MyService()) {

  }
}

在这里,您为类构造函数提供了一个默认参数。因此,如果有人(您案例中的组件)通过服务实例,它将使用该实例,否则它将创建自己的实例。

我认为这个答案应该对您有所帮助,谢谢您,但我已经读过了,而不是我的案例,我想要一个自定义类,这个类可以从DI中获益。您好,谢谢您的回答,您的第1点接近我想要的,但问题是,是否可以不通过现在不需要DI的所有类传递服务。在我的情况下,不需要提供程序,组件只是我的启动点。更明确地说,就像我的组件是游戏的引导,我想启动引擎,但是第一个类不必实例化所有服务并传递所有类直到类端点。所以我相信我做了可选参数并自动填充。嗨,不,这是不可能的。依赖项注入按顺序工作,并且您的类不是由angular实例化的。由于您自己实例化了这个类,所以如果依赖项注入用于您的类,那么您就不能利用它了。谢谢。因此,如果我关联多个级别的类,我必须传递所有需要的服务,并且不能像一个全局容器那样受益。是的,组件的概念由此而来。所以基本上,DI只有在按角度顺序进行操作时才能被利用。任何具有依赖项的显式类都应显式提供该依赖项