var injector = function(){
var services = [];
function getParamsList(fn) {
try {
var b = fn.toString(),s = b.indexOf('('),e = b.indexOf(')'),
p = b.substring(s+1,e).replace(/\s/g,'').split(','),err = [];
for(var i=0; i<p.length; ++i) {
if(p[i] in services) p[i] = services[p[i]];
else err.push(p[i]);
}
throw Error();
} catch(e) {
if(err.length > 0)
console.error(err.join(', ')+' - does not exists!');
if(e.message !== '') console.error(e.message);
return p;
}
}
return {
factory:function(nm,fn) {
services[nm] = fn.apply(this);
return this;
},
get:function(nm) {
return services[nm];
},
invoke:function(fn) {
try {
var _fn = (fn instanceof Function) ? fn.toString() : undefined;
if(_fn === undefined) throw Error('Function is expected!');
fn.apply({},getParamsList(_fn));
return this;
} catch(e) {
console.error(e.message);
}
}
};
}();
$(document).ready(function(){
function foo(serviceC,serviceD) {
$('#result').html(serviceC.a+serviceD.b);
};
injector
.factory('serviceC',function(){
return {a:12};
})
.factory('serviceD',function(){
return {b:3};
})
.invoke(foo);
});
<span id='result'</span>>