aboutsummaryrefslogtreecommitdiffstats
path: root/src/Injector.js
diff options
context:
space:
mode:
authorMisko Hevery2012-02-22 11:31:49 -0800
committerMisko Hevery2012-02-22 11:32:09 -0800
commitfbcb7fdd141c277d326dc3ed34545210c4d5628f (patch)
treec69844d52dd52bbff0b8179098f305c0054241a0 /src/Injector.js
parentfa69d10122458fb92b311ca5e30a5804c03c0778 (diff)
downloadangular.js-fbcb7fdd141c277d326dc3ed34545210c4d5628f.tar.bz2
fix($injector): circular dependency instatiation
Diffstat (limited to 'src/Injector.js')
-rw-r--r--src/Injector.js7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/Injector.js b/src/Injector.js
index a9ec6e5d..c24cbb51 100644
--- a/src/Injector.js
+++ b/src/Injector.js
@@ -273,7 +273,8 @@ function inferInjectionArgs(fn) {
function createInjector(modulesToLoad) {
- var providerSuffix = 'Provider',
+ var INSTANTIATING = {},
+ providerSuffix = 'Provider',
path = [],
loadedModules = new HashMap(),
providerCache = {
@@ -394,10 +395,14 @@ function createInjector(modulesToLoad) {
throw Error('Service name expected');
}
if (cache.hasOwnProperty(serviceName)) {
+ if (cache[serviceName] === INSTANTIATING) {
+ throw Error('Circular dependency: ' + path.join(' <- '));
+ }
return cache[serviceName];
} else {
try {
path.unshift(serviceName);
+ cache[serviceName] = INSTANTIATING;
return cache[serviceName] = factory(serviceName);
} finally {
path.shift();