# di **Repository Path**: lsdkit/di ## Basic Information - **Project Name**: di - **Description**: 依赖注入容器 该项目提供了一个基于 TypeScript 实现的依赖注入(DI)容器,用于管理应用程序中的对象生命周期和依赖关系。支持三种不同的服务生命周期:瞬态(Transient)、单例(Singleton) 和 创建工厂。 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-19 - **Last Updated**: 2024-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 依赖注入容器 该项目提供了一个基于 TypeScript 实现的依赖注入(DI)容器,用于管理应用程序中的对象生命周期和依赖关系。支持三种不同的服务生命周期:**瞬态(Transient)**、**单例(Singleton)** 和 **创建工厂**。 ### 特性 - **依赖注册**:支持注册不同生命周期(瞬态、单例或默认)的服务。 - **构造函数注入**:根据 TypeScript 的元数据自动注入依赖项到构造函数中。 - **装饰器支持**:使用装饰器标记需要注入的依赖项。 - **反射功能**:利用 TypeScript 的 `reflect-metadata` 实现对构造函数参数类型的反射。 ### 安装 ```bash npm install --save @lsdkit/di ``` ```bash yarn add -D @lsdkit/di ``` ### 使用方法 #### 1. 定义服务和依赖项 ```typescript import { inject, ObjectContainer } from '@lsdkit/di'; // 示例服务 class DataService { getData() { return '数据来自 DataService'; } } // 带有依赖项的示例服务 class UserService { private dataService: DataService; constructor(@inject(Symbol.for('DataService')) dataService: DataService) { this.dataService = dataService; } getUserData() { return this.dataService.getData(); } } ``` #### 2. 创建对象容器 ```typescript // 初始化容器 const container = new ObjectContainer(); // 注册服务 container.addSingleton(Symbol.for('DataService'), DataService); container.addTransient(Symbol.for('UserService'), UserService); ``` #### 3. 解析依赖项 ```typescript // 解析服务 const userService = container.getService(Symbol.for('UserService')); console.log(userService.getUserData()); // 输出: 数据来自 DataService ``` ### API 参考 #### `ObjectContainer` 类 - **`add(token: symbol, factory: (container: ObjectContainer) => TService): void`** - 使用工厂函数注册带有指定标记的服务。 - **`addSingleton(token: symbol, service: new (...args: any[]) => TService): void`** - 注册带有指定标记的单例服务。 - **`addTransient(token: symbol, service: new (...args: any[]) => TService): void`** - 注册带有指定标记的瞬态服务。 - **`getService(token: symbol): TService | undefined`** - 根据标记解析单个服务实例。 - **`getServices(token: symbol): TService[]`** - 解析所有使用指定标记注册的服务实例。 #### `inject` 装饰器 - **`inject(token: symbol): ParameterDecorator`** - 标记构造函数参数,用于依赖注入。支持注入单个服务和服务数组。 ### 许可证 本项目基于 MIT 许可证发布 - 查看 [LICENSE](LICENSE) 文件了解详细信息。 ### 贡献 1. Fork 本仓库。 2. 创建你的特性分支 (`git checkout -b feature/MyFeature`). 3. 提交你的修改 (`git commit -am 'Add my feature'`). 4. 将你的修改推送到分支 (`git push origin feature/MyFeature`). 5. 提交一个 Pull Request。 ### 鸣谢 - 作者: lusida - 邮箱: 474309146@qq.com - GitHub: [YourGitHubUsername](https://github.com/YourGitHubUsername) ### 联系方式 如有疑问或需要支持,请联系 [Your Name](mailto:your.email@example.com)。 --- 这份 README.md 模板详细介绍了依赖注入容器的基本使用方法、特性、API 参考、许可证、贡献指南和联系信息。根据你的具体实现和偏好,调整各部分内容。