1 | import { inject, injectWithName, registerFactory } from './global-injector'
|
2 |
|
3 | export 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 |
|
27 | export interface IFactory<T>
|
28 | {
|
29 | build(): T;
|
30 | }
|
31 |
|