如何将 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
我有自定义 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