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

OSCHINA-MIRROR/lei2jun-di-example

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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 )

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

Введение

Пример DI (внедрения зависимости), этот проект предназначен для изучения способов реализации регистрации зависимостей. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
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