Skip to content

Commit 34bfc62

Browse files
committed
feat($injector): print caller name in "unknown provider" errors (when available)
Fixes angular#8135
1 parent 89c57a8 commit 34bfc62

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/auto/injector.js

+11-7
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ function annotate(fn, strictDi, name) {
176176
* Return an instance of the service.
177177
*
178178
* @param {string} name The name of the instance to retrieve.
179+
* @param {string} caller The origin of the function call, only used to provide more background in error messages.
179180
* @return {*} The instance.
180181
*/
181182

@@ -622,14 +623,17 @@ function createInjector(modulesToLoad, strictDi) {
622623
}
623624
},
624625
providerInjector = (providerCache.$injector =
625-
createInternalInjector(providerCache, function() {
626+
createInternalInjector(providerCache, function(serviceName, caller) {
627+
if (angular.isString(caller)) {
628+
path.push(caller);
629+
}
626630
throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
627631
})),
628632
instanceCache = {},
629633
instanceInjector = (instanceCache.$injector =
630-
createInternalInjector(instanceCache, function(servicename) {
631-
var provider = providerInjector.get(servicename + providerSuffix);
632-
return instanceInjector.invoke(provider.$get, provider, undefined, servicename);
634+
createInternalInjector(instanceCache, function(serviceName, caller) {
635+
var provider = providerInjector.get(serviceName + providerSuffix, caller);
636+
return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
633637
}));
634638

635639

@@ -759,7 +763,7 @@ function createInjector(modulesToLoad, strictDi) {
759763

760764
function createInternalInjector(cache, factory) {
761765

762-
function getService(serviceName) {
766+
function getService(serviceName, caller) {
763767
if (cache.hasOwnProperty(serviceName)) {
764768
if (cache[serviceName] === INSTANTIATING) {
765769
throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
@@ -770,7 +774,7 @@ function createInjector(modulesToLoad, strictDi) {
770774
try {
771775
path.unshift(serviceName);
772776
cache[serviceName] = INSTANTIATING;
773-
return cache[serviceName] = factory(serviceName);
777+
return cache[serviceName] = factory(serviceName, caller);
774778
} catch (err) {
775779
if (cache[serviceName] === INSTANTIATING) {
776780
delete cache[serviceName];
@@ -802,7 +806,7 @@ function createInjector(modulesToLoad, strictDi) {
802806
args.push(
803807
locals && locals.hasOwnProperty(key)
804808
? locals[key]
805-
: getService(key)
809+
: getService(key, serviceName)
806810
);
807811
}
808812
if (isArray(fn)) {

0 commit comments

Comments
 (0)