refactor($injector): move $injector into the providerCache

Better than special-casing '$injector' in createInjector.
This commit is contained in:
JP Sugarbroad 2012-06-13 13:37:19 -07:00 committed by Igor Minar
parent 6e2d9711e8
commit e3e8813e3c
2 changed files with 20 additions and 14 deletions

View file

@ -410,9 +410,10 @@ function createInjector(modulesToLoad) {
decorator: decorator
}
},
providerInjector = createInternalInjector(providerCache, function() {
throw Error("Unknown provider: " + path.join(' <- '));
}),
providerInjector = (providerCache.$injector =
createInternalInjector(providerCache, function() {
throw Error("Unknown provider: " + path.join(' <- '));
})),
instanceCache = {},
instanceInjector = (instanceCache.$injector =
createInternalInjector(instanceCache, function(servicename) {
@ -489,9 +490,7 @@ function createInjector(modulesToLoad) {
try {
for(var invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {
var invokeArgs = invokeQueue[i],
provider = invokeArgs[0] == '$injector'
? providerInjector
: providerInjector.get(invokeArgs[0]);
provider = providerInjector.get(invokeArgs[0]);
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
}

View file

@ -3,11 +3,13 @@
describe('injector', function() {
var providers;
var injector;
var providerInjector;
beforeEach(module(function($provide) {
beforeEach(module(function($provide, $injector) {
providers = function(name, factory, annotations) {
$provide.factory(name, extend(factory, annotations||{}));
};
providerInjector = $injector;
}));
beforeEach(inject(function($injector){
injector = $injector;
@ -72,6 +74,11 @@ describe('injector', function() {
});
it('should create a new $injector for the run phase', inject(function($injector) {
expect($injector).not.toBe(providerInjector);
}));
describe('invoke', function() {
var args;
@ -535,26 +542,26 @@ describe('injector', function() {
it('should decorate the missing service error with module name', function() {
angular.module('TestModule', [], function($injector) {});
angular.module('TestModule', [], function(xyzzy) {});
expect(function() {
createInjector(['TestModule']);
}).toThrow('Unknown provider: $injector from TestModule');
}).toThrow('Unknown provider: xyzzy from TestModule');
});
it('should decorate the missing service error with module function', function() {
function myModule($injector){}
function myModule(xyzzy){}
expect(function() {
createInjector([myModule]);
}).toThrow('Unknown provider: $injector from ' + myModule);
}).toThrow('Unknown provider: xyzzy from ' + myModule);
});
it('should decorate the missing service error with module array function', function() {
function myModule($injector){}
function myModule(xyzzy){}
expect(function() {
createInjector([['$injector', myModule]]);
}).toThrow('Unknown provider: $injector from ' + myModule);
createInjector([['xyzzy', myModule]]);
}).toThrow('Unknown provider: xyzzy from ' + myModule);
});