快速开始
# 快速开始
# 简介
本库是利用 typescript 的 decorator 实现了依赖注入能力的小型工具库。实现过程参考了 Spring (opens new window), Angular (opens new window), typedi (opens new window), InversifyJS (opens new window)等类似的开源实现。
本库一般不是直接用于业务开发,而是作为其他库的依赖,提供统一的依赖注入能力。
# 安装
npm install @kaokei/di reflect-metadata
1
注意到我们同时安装了 reflect-metadata,这是因为我们需要获取 ts 提供的类型信息。
还需要注意本库是强依赖 typescript 环境的,需要在 tsconfig.js 文件中配置如下两个字段。
提示
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
# 基本使用
最常见的使用场景就是代替手动 new 一个类来获取实例对象,可以通过本库自动获取对象。
import { Injectable, Injector } from "@kaokei/di";
@Injectable()
export class LoggerService {
public log(...msg: any[]) {
console.log("from logger service ==>", ...msg);
}
}
@Injectable()
export class CountService {
public count = 0;
constructor(private logger: LoggerService) {}
public addOne() {
this.count++;
this.logger.log("addOne ==> ", this.count);
}
}
// 实例化一个注入器对象
const injector = new Injector();
// 通过注入器对象获取CountService类的实例对象
// 并且本库会自动注入LoggerService类的实例对象作为CountService的依赖
const countService = injector.get(CountService);
// 注意到我们并没有手动的维护LoggerService的注入过程
// 但是this.logger.log依然可以打印出相应的日志
countService.addOne();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 使用建议
建议直接看源码 (opens new window)即可,总共也就 400 行代码。
建议搭配测试用例服用效果更佳。单元测试覆盖率已经达到 100%。
编辑 (opens new window)
上次更新: 2023/08/22, 17:17:59