first commit

This commit is contained in:
编码猿
2024-09-27 01:25:59 +08:00
commit 546fffb620
78 changed files with 30293 additions and 0 deletions

41
dist/core/annotation/Ioc.annotation.js vendored Normal file
View File

@@ -0,0 +1,41 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Inject = exports.Injectable = void 0;
var Ioc_model_1 = require("../model/Ioc.model");
/**
* 收集类依赖
* @constructor
*/
function Injectable() {
return function (_constructor) {
if (Ioc_model_1.default.classPool.indexOf(_constructor) !== -1) {
throw new Error('无需重复收集类');
}
else {
//注册
Ioc_model_1.default.classPool = [_constructor];
}
};
}
exports.Injectable = Injectable;
/**
* 将类依赖实例化然后注入到被装饰的属性中
* @constructor
*/
function Inject() {
return function (target, propertyName) {
/**
* 使用 reflect-metadata 提供的内置 类型元数据键 design:type 通过反射拿到被装饰属性的类型
* 也就是 类属性要实例化 的 service 类
*/
var propertyType = Reflect.getMetadata('design:type', target, propertyName);
if (Ioc_model_1.default.classPool.indexOf(propertyType) == -1) {
throw new Error('被装饰的属性所属的变量类型类,没有被装饰器@Injectable()注入,请检查!');
}
else {
// 从存取器的数组中通过下标取出被装饰属性对应的service类然后实例化这个类在放入被装饰的属性中
target[propertyName] = new (Ioc_model_1.default.classPool[Ioc_model_1.default.classPool.indexOf(propertyType)])();
}
};
}
exports.Inject = Inject;