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>>