该项目提供了一个基于 TypeScript 实现的依赖注入(DI)容器,用于管理应用程序中的对象生命周期和依赖关系。支持三种不同的服务生命周期:瞬态(Transient)、单例(Singleton) 和 创建工厂。
- 依赖注册:支持注册不同生命周期(瞬态、单例或默认)的服务。
- 构造函数注入:根据 TypeScript 的元数据自动注入依赖项到构造函数中。
- 装饰器支持:使用装饰器标记需要注入的依赖项。
-
反射功能:利用 TypeScript 的
reflect-metadata
实现对构造函数参数类型的反射。
npm install --save @lsdkit/di
yarn add -D @lsdkit/di
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();
}
}
// 初始化容器
const container = new ObjectContainer();
// 注册服务
container.addSingleton(Symbol.for('DataService'), DataService);
container.addTransient(Symbol.for('UserService'), UserService);
// 解析服务
const userService = container.getService<UserService>(Symbol.for('UserService'));
console.log(userService.getUserData()); // 输出: 数据来自 DataService
-
add<TService>(token: symbol, factory: (container: ObjectContainer) => TService): void
- 使用工厂函数注册带有指定标记的服务。
-
addSingleton<TService>(token: symbol, service: new (...args: any[]) => TService): void
- 注册带有指定标记的单例服务。
-
addTransient<TService>(token: symbol, service: new (...args: any[]) => TService): void
- 注册带有指定标记的瞬态服务。
-
getService<TService>(token: symbol): TService | undefined
- 根据标记解析单个服务实例。
-
getServices<TService>(token: symbol): TService[]
- 解析所有使用指定标记注册的服务实例。
-
inject(token: symbol): ParameterDecorator
- 标记构造函数参数,用于依赖注入。支持注入单个服务和服务数组。
本项目基于 MIT 许可证发布 - 查看 LICENSE 文件了解详细信息。
- Fork 本仓库。
- 创建你的特性分支 (
git checkout -b feature/MyFeature
). - 提交你的修改 (
git commit -am 'Add my feature'
). - 将你的修改推送到分支 (
git push origin feature/MyFeature
). - 提交一个 Pull Request。
- 作者: lusida
- 邮箱: 474309146@qq.com
- GitHub: YourGitHubUsername
如有疑问或需要支持,请联系 Your Name。
这份 README.md 模板详细介绍了依赖注入容器的基本使用方法、特性、API 参考、许可证、贡献指南和联系信息。根据你的具体实现和偏好,调整各部分内容。