全新 JavaScript 装饰器实战下篇:实现依赖注入

2023-10-20 11:43:50 浏览数 (3)

系列文章:

  • 全新 Javascript 装饰器实战上篇:用 MobX 的方式打开 Vue
  • 全新 JavaScript 装饰器实战下篇:实现依赖注入

上一篇文章我们介绍了 JavaScript 最新的装饰器提案,以及它和旧版的区别。这篇文章我们将继续深入装饰器,尝试实现一个简易的依赖注入库。

谈到装饰器我们总会听到 reflect-metadata, 尤其是社区上的依赖注入库,比如 inversify.js

我们在上一篇文章的装饰器实现中,会直接去转换或者修改类的结构,大部分场景这并不是最佳实践。

大部分情况下我们应该利用装饰器来收集一些标注信息,比如 MobX 用装饰器来标注哪些是 observable、哪些是 computed;Inversify.js 用 inject 标注哪些属性需要进行注入;Angular.js 使用 Input/Output 标记属性….

如果我们要通过装饰器来标记类的原信息,那就得来认识一下:装饰器的好搭子 reflect-metadata

DI 库经常提及的 reflect-metadata 到底是什么?

这是一个 JavaScript 提案,但是作者并没有将其提交到 TC39。它的继任者现在是 Decorator Metadata,现在已经进入了 Stage 3 阶段,Typescript 也将在 5.2 中实现这个提案。

Decorator Metadata 会在下文详细介绍,我们先来看看 reflect-metadata。

先来看看使用它能用来干啥:

代码语言:javascript复制
test('reflect-metadata', () => {
  const key = 'myKey'

  // 


	

0 人点赞