【问题标题】:Using Inversify to do a Multiinject of a class with constant and injected parameters使用 Inversify 对具有常量和注入参数的类进行多重注入
【发布时间】:2018-04-01 11:51:51
【问题描述】:

我有一个名为 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));

这一切都很好。但是我现在想将第二个参数注入到 insurancePolicy 类中:

    constructor(public index: number,
        @inject("IIntakeLayout") intakeLayout: IIntakeLayout) {
    }

我该怎么做?我尝试查看此处概述的技术:InversifyJS Injecting Literal Constructor Parameters,但我看不出它们在多重注入场景中如何工作。请注意,InsuranceController 本身是注入的,因此我无法手动创建它。我应该如何使用 Inversify 来解决这个问题?

【问题讨论】:

    标签: typescript inversifyjs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2020-08-14
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多