依赖注入定义为组件之间依赖关系由容器在运行期决定,形象的说即由容器动态的将某个依赖关系注入到组件之中在面向对象编程中,我们经常处理的问题就是解耦,控制反转(IoC)就是常用的面向对象编程的设计原则,其中依赖注入是控制反转最常用的实现。目标解决当前类不负责被依赖类实例的创建和初始化。
依赖是程序中常见的现象,假设有 A和B都被C耦合依赖着,在 OOP 编程中依赖无处不在。依赖形式有多种表现形式,比如一个类向另一个类发消息,一个类是另一个类的成员,一个类是另一个类的参数。
eg: 以用户调用 API 层打印日志来说明
采用依赖注入,UserService不负责被依赖类的创建和销毁,而是通过外部传入api和logger对象的方式注入。常见依赖注入方式有三种,本文主要以构造器注入为例解释。
1、预备知识
Proxy 与 Reflect 是 ES6 为了操作对象引入的 API,Reflect 的 API 和 Proxy 的 API 一一对应,并且可以函数式的实现一些对象操作。
另外,使用 reflect-metadata 可以让 Reflect 支持元编程
类型获取
2)Decorators
只实现了依赖提取的核心部分,依赖注入还有一个部分是Container容器存储相关。
声明接口及类型:
声明依赖:
也可以使用 property injection 代替 constructor injection ,这样就不用声明构造函数。
创建并配置一个 Container
解析依赖
An exception:
主要原因:decorator被调用时,类还没有声明,导致inject(undefined),InversifyJS 推荐使用 Symboy.for 生成依赖唯一标识符。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69995740/viewspace-2772924/ ,如需转载,请注明出处,否则将追究法律责任。