如何将 DI 与构造参数一起使用?

How to use DI with construct parameter?

我有自定义 class 注入到另一个组件 class:

export class FormRegister implements IFormRegister, IFormControl {
}

export class A {
 constructor(public formRegister: FormRegister) {
 }
}

它工作正常,但是如果我将构造函数添加到 class FormRegister(),例如:

export class FormRegister implements IFormRegister, IFormControl {
   construct(private newDependence: Dep)
}

它在 class A:

中产生错误
Uncaught Error: Can't resolve all parameters for FormRegister: (?). 

因为它没有private newDependence: Dep作为参数。

如何使用带有构造参数的DI?

我试过这个:

export class A {
     constructor(public formRegister: new FormRegister(this.newDependence)) {
     }
    }

我找到了解决方案,假设我们有自定义 class 来注入任何组件:

export class FormRegister implements IFormRegister, IFormControl {

  public constructor(public titleService: Title) {

  }

}

在我们必须在提供商部分的 NgModule 中注册此 class/service 之前:

providers: [
  FormRegister
]

您可以注意到我们的 class/service 在构造函数中使用了 DI。为避免错误,只需在 class FormRegister:

之前添加此装饰器
@Injectable({
  providedIn: 'root',
  useFactory: () => new FormRegister(Title),
})

export class FormRegister implements IFormRegister, IFormControl {
}

其中useFactory: () => new FormRegister(Title),表示我们使用Title

的DI