【问题标题】:constructor injection using inversifyJS and Alsatian test framework使用 inversifyJS 和 Alsatian 测试框架的构造函数注入
【发布时间】:2018-08-06 14:32:54
【问题描述】:

希望有人可以在这里指导我正确的方向 我正在使用带有 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 install

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

我正在努力保持代码结构化,所以如果有人知道可以做些什么来让构造函数注入工作,那就太好了

【问题讨论】:

    标签: unit-testing typescript dependency-injection inversifyjs


    【解决方案1】:

    可悲的答案是“你不能”。 Alsatian 使用new 运算符来实例化您的测试夹具的类。因此,inverisfy 无法知道必须将依赖项注入到 Fixture 类中。 (请记住,使用container.get() 实例化类时会注入依赖项)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 2015-05-12
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多