使用 Inversify 对具有常量和注入参数的 class 进行多次注入
Using Inversify to do a Multiinject of a class with constant and injected parameters
我有一个名为 insuranceController 的 Typescript class,它接受像这样的多注入参数:
@injectable()
export class InsuranceController implements IInsuranceController {
private policies: IInsurancePolicy[];
constructor(@multiInject("IInsurancePolicy") policies: IInsurancePolicy[]) {
this.policies = policies;
}
}
insurancePolicy class 需要一个数字作为构造函数参数
@injectable()
export class InsurancePolicy implements IInsurancePolicy{
constructor(public index: number) {
}
}
所以我创建绑定如下:
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(0));
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(1));
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(2));
这一切都很好。但是我现在想在 insurancePolicy class:
中注入第二个参数
constructor(public index: number,
@inject("IIntakeLayout") intakeLayout: IIntakeLayout) {
}
我该怎么做?我已经尝试查看此处概述的技术:,但我看不到它们在多重注入场景中的工作方式。请注意,InsuranceController 本身是注入的,因此我无法手动创建它。我应该如何使用 Inversify 来解决这个问题?
您可以创建一个使用 toDynamicValue
:
的辅助函数
function registerInsurancePolicy(ctr: Container, id: number) {
ctr.bind<IInsurancePolicy>("IInsurancePolicy")
.toDynamicValue((context) => {
cosnt intakeLayout = context.container.get<IIntakeLayout>("IIntakeLayout");
return new InsurancePolicy(id, intakeLayout);
})
.inSingletonScope();
}
然后使用助手:
registerInsurancePolicy(this.container, 1);
registerInsurancePolicy(this.container, 2);
registerInsurancePolicy(this.container, 3);
我有一个名为 insuranceController 的 Typescript class,它接受像这样的多注入参数:
@injectable()
export class InsuranceController implements IInsuranceController {
private policies: IInsurancePolicy[];
constructor(@multiInject("IInsurancePolicy") policies: IInsurancePolicy[]) {
this.policies = policies;
}
}
insurancePolicy class 需要一个数字作为构造函数参数
@injectable()
export class InsurancePolicy implements IInsurancePolicy{
constructor(public index: number) {
}
}
所以我创建绑定如下:
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(0));
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(1));
this.container.bind<IInsurancePolicy>("IInsurancePolicy").toConstantValue(new InsurancePolicy(2));
这一切都很好。但是我现在想在 insurancePolicy class:
中注入第二个参数 constructor(public index: number,
@inject("IIntakeLayout") intakeLayout: IIntakeLayout) {
}
我该怎么做?我已经尝试查看此处概述的技术:
您可以创建一个使用 toDynamicValue
:
function registerInsurancePolicy(ctr: Container, id: number) {
ctr.bind<IInsurancePolicy>("IInsurancePolicy")
.toDynamicValue((context) => {
cosnt intakeLayout = context.container.get<IIntakeLayout>("IIntakeLayout");
return new InsurancePolicy(id, intakeLayout);
})
.inSingletonScope();
}
然后使用助手:
registerInsurancePolicy(this.container, 1);
registerInsurancePolicy(this.container, 2);
registerInsurancePolicy(this.container, 3);