import {BEAN_OPTION, COMPONENT_TYPE, SCAN_TYPE} from "../@types/types"; import "reflect-metadata" import {applicationContext} from "../context/ApplicationContext"; export default function Resolver(_option?:BEAN_OPTION){ return function(constructor:T) { let option:BEAN_OPTION = { SCOPE:"singleton", SUBTYPE:"" } if(_option) Object.assign(option, _option); option.MODULE_NAME = `${constructor.name}`; const RESOLVER = class extends constructor { constructor(...args: any) { // const proto = Object.getPrototypeOf(constructor).__proto__; let classScope = option.SCOPE const protos = [constructor.prototype, Object.getPrototypeOf(constructor).__proto__]; protos.forEach((proto)=>{ if(!proto) return; Object.keys(proto).forEach((item) => { if(item.indexOf("__") == 0 && item.lastIndexOf("__") == item.length-2){ proto[item].INVOKE(classScope); } }); }) super(); } } applicationContext.addScanBean(RESOLVER, COMPONENT_TYPE.RESOLVER, option); return RESOLVER; }; }