UNPKG

818 BPlain TextView Raw
1import { inject, injectWithName, registerFactory } from './global-injector'
2
3export function factory(name: string, ...toInject: string[])
4{
5 return function (target: Function)
6 {
7 var instance: IFactory<any> = null;
8 var factory = function ()
9 {
10 if (!instance)
11 {
12 var args = [null];
13 for (var arg in arguments)
14 args.push(arguments[arg]);
15 instance = new (target.bind.apply(target, args))();
16 }
17 return instance.build();
18 };
19
20 if (toInject == null || toInject.length == 0)
21 registerFactory(name, inject(factory));
22 else
23 registerFactory(name, injectWithName(toInject, factory));
24 }
25}
26
27export interface IFactory<T>
28{
29 build(): T;
30}
31