Typescript 使用Inversify对具有常量和注入参数的类进行多重注入

Typescript 使用Inversify对具有常量和注入参数的类进行多重注入,typescript,inversifyjs,Typescript,Inversifyjs,我有一个名为insuranceController的Typescript类,它接受一个多注入参数,如下所示: @injectable() export class InsuranceController implements IInsuranceController { private policies: IInsurancePolicy[]; constructor(@multiInject("IInsurancePolicy") policies: IInsurancePo

我有一个名为insuranceController的Typescript类,它接受一个多注入参数,如下所示:

@injectable()
export class InsuranceController implements IInsuranceController {
    private policies: IInsurancePolicy[];

    constructor(@multiInject("IInsurancePolicy") policies: IInsurancePolicy[]) {
        this.policies = policies;
    }
}
insurancePolicy类需要一个数字作为构造函数参数

@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));

我该怎么做?我尝试过这里概述的技术,但我看不出它们在多注入场景中是如何工作的。请注意,InsuranceController本身是注入的,因此我无法手动创建它。我应该如何使用Inversify进行此操作?

您可以创建一个使用
动态值的助手函数:

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();
}

您可以创建一个使用
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);