Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 29a0598

Browse files
committed
feat($injector): Allow specifying a decorator on $injector
Allows the definition of a decorator on `$injector` Closes: #13103
1 parent 4038aab commit 29a0598

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

src/auto/injector.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -642,16 +642,19 @@ function createInjector(modulesToLoad, strictDi) {
642642
throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
643643
})),
644644
instanceCache = {},
645-
instanceInjector = (instanceCache.$injector =
645+
protoInstanceInjector =
646646
createInternalInjector(instanceCache, function(serviceName, caller) {
647647
var provider = providerInjector.get(serviceName + providerSuffix, caller);
648-
return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
649-
}));
650-
651-
652-
forEach(loadModules(modulesToLoad), function(fn) { if (fn) instanceInjector.invoke(fn); });
653-
648+
return instanceInjector.invoke(
649+
provider.$get, provider, undefined, serviceName);
650+
}),
651+
instanceInjector = protoInstanceInjector;
652+
653+
providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) };
654+
var runBlocks = loadModules(modulesToLoad);
655+
instanceInjector = protoInstanceInjector.get('$injector');
654656
instanceInjector.strictDi = strictDi;
657+
forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); });
655658

656659
return instanceInjector;
657660

test/auto/injectorSpec.js

+17
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,23 @@ describe('injector', function() {
688688
expect(log.join('; ')).
689689
toBe('myDecoratedService:input,dependency1; myService:decInput; dec+origReturn');
690690
});
691+
692+
693+
it('should allow for decorators to $injector', function() {
694+
injector = createInjector(['ng', function($provide) {
695+
$provide.decorator('$injector', function($delegate) {
696+
return extend({}, $delegate, {get: function(val) {
697+
if (val === 'key') {
698+
return 'value';
699+
}
700+
return $delegate.get(val);
701+
}});
702+
});
703+
}]);
704+
705+
expect(injector.get('key')).toBe('value');
706+
expect(injector.get('$http')).not.toBeUndefined();
707+
});
691708
});
692709
});
693710

0 commit comments

Comments
 (0)