import {BEAN_OPTION, DAO_OPTION, DEFAULT_CONTEXT} from "../@types/types"; import "reflect-metadata" import {applicationContext} from "../context/ApplicationContext"; import {logger} from "../logger/Logger"; export default function Autowired(value:string, _option?:BEAN_OPTION){ return function(target:any, propertyName:string) { let option:BEAN_OPTION = {SCOPE:'singleton'} if(_option) Object.assign(option, _option); target[`__${propertyName}__`] = ((target, value, option)=>{ return { SCOPE:option.SCOPE, INVOKE:(classScope:string)=>{ if(classScope === "singleton" && (option.SCOPE === "request" || option.SCOPE === "prototype")) { logger.error("singleton class cannot autowired request scope") process.exit(0); } target[propertyName] = applicationContext.getBean(value, option); } } })(target, value, option); }; }