反转所需的帮助,我们为什么需要它?

inversify help required and why do we need it?

你能推荐任何关于 inversify in typescript 的优秀学习资源吗?

我查看了 http://inversify.io/ 并按照示例进行了操作,但不了解它的实际工作原理或我需要它的原因。

一个很棒的视频学习资源或一个简单易用的初学者示例会很棒。

感谢您的帮助。

控制反转的想法,又名依赖注入是 class 将实例化依赖实例的控制权(读取:责任)移交给将提供它们的容器 class用这些实例代替。

所以你不会做这样的事情:

public constructor() {
    this._katana = new Katana();
    this._shuriken = new Shuriken();
}

我不打算给出一个完整的例子,因为我基本上是在 'The Basics'.
部分复制粘贴他们在他们网站上明确分享的代码 他们举了一个构造函数注入的例子:

public constructor(
    @inject(TYPES.Weapon) katana: Weapon,
    @inject(TYPES.ThrowableWeapon) shuriken: ThrowableWeapon
) {
    this._katana = katana;
    this._shuriken = shuriken;
}

这特别适用于:

  • 测试,因为可以模拟和注入依赖对象
  • 根据可变参数注入依赖对象。

例如,根据环境,您可能希望注入具有不同值的不同配置对象。这只是一个例子。

构造函数注入通常优于 属性 注入,因为库似乎也支持这一点。

注意注入的是接口,不是具体的class类型。
所以 class 只是声明它需要一个类型为 Weapon / ThrowableWeapon 的对象。

具体绑定发生在 inversify.config.ts

container.bind<Weapon>(TYPES.Weapon).to(Katana)

之所以有用,是因为您可以在运行时提供具体的 classes。您不需要在 class 中预先定义(硬编码)它们。