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

Hel*_*rld 1 javascript dependency-injection typescript inversifyjs

你能推荐任何关于打字稿 inversify 的优秀学习资源吗?

我查看了 http://inversify.io/并遵循了示例,但我没有理解它的实际工作原理或我为什么需要它。

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

谢谢您的帮助。

Tra*_*ace 7

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

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

public constructor() {
    this._katana = new Katana();
    this._shuriken = new Shuriken();
}
Run Code Online (Sandbox Code Playgroud)

我不会给出一个完整的例子,因为我基本上会复制粘贴他们在他们的网站上的“基础知识”部分清楚地共享的代码。
他们举了一个构造函数注入的例子:

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

这特别适用于:

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

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

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

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

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

container.bind<Weapon>(TYPES.Weapon).to(Katana)
Run Code Online (Sandbox Code Playgroud)

所以这很有用的原因是你有能力在运行时提供具体的类。您不需要在类中预定义(硬编码)它们。