diff --git a/src/auto/injector.js b/src/auto/injector.js index 925287fcce7f..0984c49da9db 100644 --- a/src/auto/injector.js +++ b/src/auto/injector.js @@ -642,16 +642,19 @@ function createInjector(modulesToLoad, strictDi) { throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); })), instanceCache = {}, - instanceInjector = (instanceCache.$injector = + protoInstanceInjector = createInternalInjector(instanceCache, function(serviceName, caller) { var provider = providerInjector.get(serviceName + providerSuffix, caller); - return instanceInjector.invoke(provider.$get, provider, undefined, serviceName); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { if (fn) instanceInjector.invoke(fn); }); - + return instanceInjector.invoke( + provider.$get, provider, undefined, serviceName); + }), + instanceInjector = protoInstanceInjector; + + providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) }; + var runBlocks = loadModules(modulesToLoad); + instanceInjector = protoInstanceInjector.get('$injector'); instanceInjector.strictDi = strictDi; + forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); }); return instanceInjector; diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index 0ebc509403e1..d9b4cfed846e 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -688,6 +688,23 @@ describe('injector', function() { expect(log.join('; ')). toBe('myDecoratedService:input,dependency1; myService:decInput; dec+origReturn'); }); + + + it('should allow for decorators to $inject', function() { + injector = createInjector(['ng', function($provide) { + $provide.decorator('$injector', function($delegate) { + return extend({}, $delegate, {get: function(val) { + if (val === 'key') { + return 'value'; + } + return $delegate.get(val); + }}); + }); + }]); + + expect(injector.get('key')).toBe('value'); + expect(injector.get('$http')).not.toBeUndefined(); + }); }); });