ts-ioc-container
Version:
Typescript IoC container
21 lines (20 loc) • 691 B
JavaScript
function getProp(target, key) {
// @ts-ignore
return target[key];
}
export class ProxyInjector {
resolve(container, Target, { args: deps }) {
const args = deps.reduce((acc, it) => ({ ...acc, ...it }), {});
const proxy = new Proxy({}, {
get(target, prop) {
// eslint-disable-next-line no-prototype-builtins
return args.hasOwnProperty(prop)
? getProp(args, prop)
: prop.toString().search(/array/gi) >= 0
? container.resolveMany(prop)
: container.resolveOne(prop);
},
});
return new Target(proxy);
}
}