@akala/core
Version:
32 lines (27 loc) • 818 B
text/typescript
import { inject, injectWithName, registerFactory } from './global-injector'
export function factory(name: string, ...toInject: string[])
{
return function (target: Function)
{
var instance: IFactory<any> = null;
var factory = function ()
{
if (!instance)
{
var args = [null];
for (var arg in arguments)
args.push(arguments[arg]);
instance = new (target.bind.apply(target, args))();
}
return instance.build();
};
if (toInject == null || toInject.length == 0)
registerFactory(name, inject(factory));
else
registerFactory(name, injectWithName(toInject, factory));
}
}
export interface IFactory<T>
{
build(): T;
}