feat(injector): support $inject(fn($service){}) function invocation

This commit is contained in:
Misko Hevery 2011-10-26 21:36:19 -07:00
parent 411c1ae77e
commit 9062996a0e
2 changed files with 23 additions and 11 deletions

View file

@ -33,7 +33,9 @@
* `injector.eager()`
*/
function createInjector(factories) {
var instanceCache = {$injector: injector};
var instanceCache = {
$injector: injector
};
factories = factories || angularService;
injector.invoke = invoke;
@ -42,19 +44,23 @@ function createInjector(factories) {
if (factory.$eager)
injector(name);
});
return injector;
return instanceCache.$injector;
function injector(serviceId, path){
if (!(serviceId in instanceCache)) {
var factory = factories[serviceId];
path = path || [];
path.unshift(serviceId);
if (!factory) throw Error("Unknown provider for '" + path.join("' <- '") + "'.");
inferInjectionArgs(factory);
instanceCache[serviceId] = invoke(null, factory, [], path);
path.shift();
if (typeof serviceId == 'string') {
if (!(serviceId in instanceCache)) {
var factory = factories[serviceId];
path = path || [];
path.unshift(serviceId);
if (!factory) throw Error("Unknown provider for '" + path.join("' <- '") + "'.");
inferInjectionArgs(factory);
instanceCache[serviceId] = invoke(null, factory, [], path);
path.shift();
}
return instanceCache[serviceId];
} else {
return invoke(null, serviceId, path);
}
return instanceCache[serviceId];
}
function invoke(self, fn, args, path){

View file

@ -83,6 +83,7 @@ describe('injector', function() {
function fn(a, b, c, d) {
args = [this, a, b, c, d];
return a + b + c + d;
}
@ -99,6 +100,11 @@ describe('injector', function() {
});
it('should invoke the passed in function with all of the dependencies as arguments', function(){
expect(injector(['a', 'b', fn], [3, 4])).toEqual(10);
});
it('should fail with errors if not function or array', function(){
expect(function(){
injector.invoke({}, {});