code: function Injector(obj){
    var services = {};
    var get = name => {
      if(!(name in services)){
        const err = new Error(`[injector] service "${name}" not found`);
        return Promise.reject(err);
      }
      return services[name];
    };
    if(typeof obj === 'object')
      services = obj;
    if(typeof obj === 'function')
      get = obj;
    function resolve(name) {
      let service = get(name);
      if(typeof service === 'function')
        service = invoke(service);
      return service;
    };
    function invoke(fn, that){
      return Promise
      .all(getParameterNames(fn).map(resolve))
      .then(params => fn.apply(that, params));
    }
    return invoke;
  }
docs: Injector
  @param {*} obj