# di-example **Repository Path**: lei2jun/di-example ## Basic Information - **Project Name**: di-example - **Description**: DI(依赖注入) 实例, 本项目是为了学习依赖注册的实现方式 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 0 - **Created**: 2020-12-02 - **Last Updated**: 2025-07-18 ## Categories & Tags **Categories**: sample-code **Tags**: None ## README # DI(依赖注入) 示例 本项目是为了学习依赖注册的实现方式,如果有更好的方法可以通过 Issue 或者评论探讨。 本项目实现了以下功能: * Container(容器),用来管理依赖,功能包括依赖注册,依赖获取。 * Provide 装饰器,用来注册依赖。 * Inject 装饰器,用来注入依赖到实例对象。 ## 使用方式 假设 `A` 类依赖 `B` 类,实现代码为: ``` ts // ./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` 函数的实现,理解是如何实现所有依赖的注册的。 ``` ts 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() ```