使用 inversifyJS 和 Alsatian 测试框架的构造函数注入

constructor injection using inversifyJS and Alsatian test framework

希望有人能在这里指导我正确的方向 我在 Alsatian 测试框架中使用 inversifyJS

基本上,设计需要利用多种服务,包括数据库和其他 api 客户端,我认为让 IOC 到位来管理依赖关系是个好主意

我在使用 Alsatian 框架时遇到的问题是 属性 注入或构造函数注入都不起作用,只能从容器中手动解析它

    private resolvedNinja: Warrior;
    // does not inject property
    @inject(ServiceTypes.Warrior) private propertyNinja: Warrior;


    public constructor(
        // does not inject
        @inject(ServiceTypes.Warrior) constructorNinja:Warrior
    ){
        console.log("constructor called");

        // this injects and works
        this.resolvedNinja = container.get<Warrior>(ServiceTypes.Warrior);

        console.log("injected constructor ninja " + constructorNinja);
        console.log("injected property ninja " + this.propertyNinja);
        console.log("resolved ninja " + this.resolvedNinja);

    }

我不确定为什么,我已经清理并设置了一个小型测试项目,如果有人有兴趣查看它

https://github.com/dshamim/alsatian-test-ioc

你需要 yarn 到 运行 运行,转到项目目录并输入:

yarn install

yarn run ts-node Tests/runner.ts --tap

我正在努力使代码保持结构化,所以如果有人有任何想法可以使构造函数注入正常工作,那就太好了

悲伤的答案是"You can't"。 Alsatian 使用 new 运算符来实例化测试夹具的 classes。因此,inverisfy 无法知道必须将依赖项注入 Fixture class。 (请记住,当使用 container.get() 实例化 class 时会注入依赖项)