@lsdkit/di
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

依赖注入容器

该项目提供了一个基于 TypeScript 实现的依赖注入(DI)容器,用于管理应用程序中的对象生命周期和依赖关系。支持三种不同的服务生命周期:瞬态(Transient)单例(Singleton)创建工厂

特性

  • 依赖注册:支持注册不同生命周期(瞬态、单例或默认)的服务。
  • 构造函数注入:根据 TypeScript 的元数据自动注入依赖项到构造函数中。
  • 装饰器支持:使用装饰器标记需要注入的依赖项。
  • 反射功能:利用 TypeScript 的 reflect-metadata 实现对构造函数参数类型的反射。

安装

npm install --save @lsdkit/di
yarn add -D @lsdkit/di

使用方法

1. 定义服务和依赖项

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. 创建对象容器

// 初始化容器
const container = new ObjectContainer();

// 注册服务
container.addSingleton(Symbol.for('DataService'), DataService);
container.addTransient(Symbol.for('UserService'), UserService);

3. 解析依赖项

// 解析服务
const userService = container.getService<UserService>(Symbol.for('UserService'));
console.log(userService.getUserData()); // 输出: 数据来自 DataService

API 参考

ObjectContainer

  • 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 装饰器

  • inject(token: symbol): ParameterDecorator
    • 标记构造函数参数,用于依赖注入。支持注入单个服务和服务数组。

许可证

本项目基于 MIT 许可证发布 - 查看 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。

鸣谢

联系方式

如有疑问或需要支持,请联系 Your Name


这份 README.md 模板详细介绍了依赖注入容器的基本使用方法、特性、API 参考、许可证、贡献指南和联系信息。根据你的具体实现和偏好,调整各部分内容。

Readme

Keywords

none

Package Sidebar

Install

npm i @lsdkit/di

Weekly Downloads

1

Version

1.1.3

License

MIT

Unpacked Size

13.8 kB

Total Files

10

Last publish

Collaborators

  • lusida