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

时间:2018-07-06 10:47:46

标签: typescript typescript2.0

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

export class FormRegister implements IFormRegister, IFormControl {
}

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

工作正常,但是如果我将构造函数添加到类FormRegister()中,就像:

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

它在A类中生成错误:

Uncaught Error: Can't resolve all parameters for FormRegister: (?). 

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

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

我尝试过:

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

1 个答案:

答案 0 :(得分:1)

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

export class FormRegister implements IFormRegister, IFormControl {

  public constructor(public titleService: Title) {

  }

}

在我们必须在提供者部分的NgModule中注册此类/服务之前:

providers: [
  FormRegister
]

您会注意到我们的类/服务在构造函数中使用DI。为避免错误,只需在类FormRegister之前添加此装饰器:

@Injectable({
  providedIn: 'root',
  useFactory: () => new FormRegister(Title),
})

export class FormRegister implements IFormRegister, IFormControl {
}

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