/** * Create an inject method * @param providerScope provider's "this" * @param providers a function(name) which returns provider function * @param cache place where instances are saved for reuse * @returns {Function} */ function createInjector(providerScope, providers, cache) { providers = providers || angularService; cache = cache || {}; providerScope = providerScope || {}; /** * injection function * @param value: string, array, object or function. * @param scope: optional function "this" * @param args: optional arguments to pass to function after injection * parameters * @returns depends on value: * string: return an instance for the injection key. * array of keys: returns an array of instances. * function: look at $inject property of function to determine instances * and then call the function with instances and scope. Any * additional arguments are passed on to function. * object: initialize eager providers and publish them the ones with publish here. * none: same as object but use providerScope as place to publish. */ return function inject(value, scope, args){ var returnValue, provider, creation; if (isString(value)) { if (!cache.hasOwnProperty(value)) { provider = providers[value]; if (!provider) throw "Unknown provider for '"+value+"'."; cache[value] = inject(provider, providerScope); } returnValue = cache[value]; } else if (isArray(value)) { returnValue = []; foreach(value, function(name) { returnValue.push(inject(name)); }); } else if (isFunction(value)) { returnValue = inject(value.$inject || []); returnValue = value.apply(scope, concat(returnValue, arguments, 2)); } else if (isObject(value)) { foreach(providers, function(provider, name){ creation = provider.$creation; if (creation == 'eager') { inject(name); } if (creation == 'eager-published') { setter(value, name, inject(name)); } }); } else { returnValue = inject(providerScope); } return returnValue; }; }ue='author'>author
path: root/perf/testUtils.js
blob: 2fc4f8a2046ffc01afe1bec0ebc8a631f2e6a4d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67