我正在尝试通过以下方式在我的节点项目上实现依赖注入反转 http://inversify.io/.
我有一个这样的内核配置:inversify.config.ts
import "reflect-metadata";
import {Kernel, interfaces} from "inversify";
import {Config} from "./config";
import {Collection} from "./collection";
let kernel = new Kernel();
kernel.bind<Config>("Config").to(Config).inSingletonScope();
// kernel.bind<interfaces.Newable<Collection>>("Collection").toConstructor<Collection>(Collection);
// it works without the line above
一类:config.ts
import {injectable} from "inversify";
@injectable()
export class Config {
constructor() {}
}
具有 DI 属性的类collection.ts
import {injectable} from "inversify";
import getDecorators from "inversify-inject-decorators";
import kernel from "../inversify.config";
let {lazyInject} = getDecorators(kernel);
@injectable()
export class Collection {
@lazyInject(Config)
private Config: Config;
constructor(a: string, b: string) {}
}
如果我不使用属性注入绑定类,一切都会按预期工作。当我尝试绑定一个类时@lazyInject
如示例所示
kernel.bind<interfaces.Newable<Collection>>("Collection").toConstructor<Collection>(Collection);
导入行inversify.config.ts
开始处理Collection.ts
和线
import kernel from "../inversify.config";`
在里面。然而当我们到达时Collection.ts
当我们已经处理时inversify.config.ts
文件行
import kernel from "../inversify.config";`
以某种方式返回undefined
制作内核undefined
for Collection
班级。所以@lazyInject
DI 失败。
最终当我尝试阅读时Config
in Collection
它失败了:
TypeError: Cannot read property 'get' of undefined
at resolve (node_modules/inversify-inject-decorators/lib/decorators.js:24:30)
at Category.getter (node_modules/inversify-inject-decorators/lib/decorators.js:6:47)
我想知道是否有一种方法可以通过以下方式完成将类与属性 DI 绑定@lazyInject
without将内核定义移动到与其中一个类相同的文件中。我正在寻找一种方法import内核就像现在一样,但使其正常工作。