diff --git a/packages/container/lib/container.js b/packages/container/lib/container.js index 0859b34e327..b026a287231 100644 --- a/packages/container/lib/container.js +++ b/packages/container/lib/container.js @@ -115,10 +115,10 @@ Container.prototype = { @param {String} fullName optional key to reset; if missing, resets everything */ reset(fullName) { - if (fullName !== undefined) { - resetMember(this, this.registry.normalize(fullName)); - } else { + if (fullName === undefined) { resetCache(this); + } else { + resetMember(this, this.registry.normalize(fullName)); } }, @@ -366,7 +366,8 @@ function destroyDestroyables(container) { function resetCache(container) { destroyDestroyables(container); - container.cache.dict = dictionary(null); + container.cache = dictionary(null); + container.factoryManagerCache = dictionary(null); } function resetMember(container, fullName) { diff --git a/packages/container/tests/container_test.js b/packages/container/tests/container_test.js index 6ca7fe476bd..821c1b90ac3 100644 --- a/packages/container/tests/container_test.js +++ b/packages/container/tests/container_test.js @@ -533,6 +533,31 @@ QUnit.test('#factoryFor instance have a common parent', (assert) => { assert.deepEqual(instance1.constructor, instance2.constructor); }); +QUnit.test('can properly reset cache', (assert) => { + let registry = new Registry(); + let container = registry.container(); + + let Component = factory(); + registry.register('component:foo-bar', Component); + + let factory1 = container.factoryFor('component:foo-bar'); + let factory2 = container.factoryFor('component:foo-bar'); + + let instance1 = container.lookup('component:foo-bar'); + let instance2 = container.lookup('component:foo-bar'); + + assert.equal(instance1, instance2); + assert.equal(factory1, factory2); + + container.reset(); + + let factory3 = container.factoryFor('component:foo-bar'); + let instance3 = container.lookup('component:foo-bar'); + + assert.notEqual(instance1, instance3); + assert.notEqual(factory1, factory3); +}); + QUnit.test('#factoryFor created instances come with instance injections', (assert) => { let registry = new Registry(); let container = registry.container();