使用 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 时会注入依赖项)
希望有人能在这里指导我正确的方向 我在 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 时会注入依赖项)