-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdi-container.js
67 lines (58 loc) · 1.25 KB
/
di-container.js
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
/**
* Created by Hoijtink on 14/04/16.
*/
"use strict";
let argsList = require('args-list');
/**
*
* @returns {{}}
*/
module.exports = function() {
let dependencies = {};
let factories = {};
let container = {};
/**
*
* @param name
* @param factory
*/
container.factory = function(name, factory) {
factories[name] = factory;
};
/**
*
* @param name
* @param dep
*/
container.register = function(name, dep) {
dependencies[name] = dep;
};
/**
*
* @param name
* @returns {*}
*/
container.get = function(name) {
if (!dependencies[name]) {
let factory = factories[name];
dependencies[name] = factory && container.inject(factory);
if (!dependencies[name]) {
throw new Error('Cannot find module: ' + name)
}
}
return dependencies[name];
};
/**
*
* @param factory
* @returns {*}
*/
container.inject = function(factory) {
let args = argsList(factory)
.map(function(dependecy) {
return container.get(dependecy)
});
return factory.apply(null, args);
};
return container;
};