Implemented ability to clone dependencies

This commit is contained in:
Borys Levytskyi
2015-04-11 18:42:39 +03:00
parent 7016b8a04b
commit 62c62933d7
3 changed files with 43 additions and 12 deletions

View File

@@ -12,7 +12,7 @@ module.exports = function(config) {
'src/js/app.js',
'src/js/components/*.js',
'src/js/app/**/*.js',
'tests/*.js'
'tests/**/*.js'
]
});
};

View File

@@ -4,24 +4,27 @@
var is = core.is;
function Container(store) {
this.store = {};
this.store = store || {};
this.resolutionStack = [];
}
Container.prototype.register = function(name, def) {
var reg = this.store[name];
if(reg == null) {
if(def instanceof Registration) {
reg = def;
}
else {
reg = new Registration(def);
}
var reg;
reg.name = name;
this.store[name] = reg;
if(this.store[name] != null) {
console.warn("Previous registration for [%1] has been replaced", name);
}
if(def instanceof Registration) {
reg = def;
}
else {
reg = new Registration(def);
}
reg.name = name;
this.store[name] = reg;
// console.log('[' + name + '] component registered');
return reg;
};
@@ -54,6 +57,14 @@
return reg.resolved;
}
Container.prototype.clone = function () {
var newStore = {};
for(var key in this.store) {
newStore[key] = this.store[key];
}
return new Container(newStore);
};
function Registration(definition) {

20
tests/core/diSpec.js Normal file
View File

@@ -0,0 +1,20 @@
describe("cloned container", function() {
var objA = { id: "a"};
var objB = { id: "b" };
var objC = { id: 'c'};
var parent = new core.Container();
parent.register('a', objA);
parent.register('b', objB);
var cloned = parent.clone();
cloned.register('a', objC);
it("should be independent from source container", function() {
expect(parent.resolve('a')).toBe(objA);
expect(cloned.resolve('a')).toBe(objC);
expect(parent.resolve('b')).toBe(objB);
expect(cloned.resolve('b')).toBe(objB);
});
});