code: function overrideInjection(obj, provides, injects) {
      if (!isFunction(obj)) {
        throw new Error('Expecting injectable function.');
      }
  
      function setupEnclosedInjectable() {
        var injected = arguments;
        return (function(){return obj.apply(obj, injected);}());
      }
  
      var overriddenObject = setupEnclosedInjectable;
      resolveProvide(overriddenObject, provides);
      resolveInjects(overriddenObject, injects);
  
      return overriddenObject;
    }
docs: Takes any injection aware function and overrides provides/inject in place of the existing
  notations without overwriting them on the original object
  @param {function} obj
  @param {string|object} provides is either an array or string of things this object provides
  @param {string|string[]|object|object[]} [injects] - is either a single string or array of
  strings of module names to be injected
  @returns {*}