1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lei2jun-di-example

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 1.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
雷军 Отправлено 02.12.2020 05:19 cd7728a

DI(依赖注入) 示例

本项目是为了学习依赖注册的实现方式,如果有更好的方法可以通过 Issue 或者评论探讨。

本项目实现了以下功能:

  • Container(容器),用来管理依赖,功能包括依赖注册,依赖获取。
  • Provide 装饰器,用来注册依赖。
  • Inject 装饰器,用来注入依赖到实例对象。

使用方式

假设 A 类依赖 B 类,实现代码为:

//    ./services/a.ts
import Inject from '../inject'
import Provide from '../provide'
import B from './b'

// 通过 Provide 标记类并在初始化时注册到容器中
@Provide('a')
export default class A {
  // 通过 Inject 将 `B` 实例注入到 `b` 中
  @Inject('b')
  public b!: B;
}

//    ./services/b.ts
import Provide from '../provide'

// 通过 Provide 标记类并在初始化时注册到容器中
@Provide('b', [10])
export default class B {
  p: number;
  constructor(p: number) {
    this.p = p;
  }
}

接下来只需要调用 binding 完成依赖遍历、注册即可使用。可参看 binding 函数的实现,理解是如何实现所有依赖的注册的。

import { binding } from './container'
import container from './container'
import A from './services/a'

async function main() {
  // 此步必不可少
  await binding()
  const a: A = container.get('a')
  console.log(a.b); //B { p: 10 }
}

main()

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lei2jun-di-example.git
git@api.gitlife.ru:oschina-mirror/lei2jun-di-example.git
oschina-mirror
lei2jun-di-example
lei2jun-di-example
master