1 Star 2 Fork 0

雷军 / di-example

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
provide.ts 834 Bytes
一键复制 编辑 原始数据 按行查看 历史
雷军军(测试) 提交于 2020-12-02 01:15 . add DI example
import interfaces from "./interfaces";
import { METADATA_KEY } from "./constants";
import "reflect-metadata";
export default function Provide(serviceIdentifier: string, args?: Array<any>) {
return function (target: any) {
// 当前 class 的信息
const currentMetadata: interfaces.ProvideSyntax = {
id: serviceIdentifier,
args: args || [],
clazz: target
};
// 已经收集的 class
const previousMetadata: interfaces.ProvideSyntax[] = Reflect.getMetadata(
METADATA_KEY.provide,
Reflect
) || [];
const newMetadata = [currentMetadata, ...previousMetadata];
// 将所有使用 Provide 装饰器标识的 class 都作为 Reflect 的元素据暂存
Reflect.defineMetadata(
METADATA_KEY.provide,
newMetadata,
Reflect
);
return target;
};
}
TypeScript
1
https://gitee.com/lei2jun/di-example.git
git@gitee.com:lei2jun/di-example.git
lei2jun
di-example
di-example
master

搜索帮助