code: function (type, property, fullName) {
        _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
  
        var fullNameType = fullName.split(':')[0];
        if (fullNameType === type) {
          throw new Error('Cannot inject a `' + fullName + '` on other ' + type + '(s).');
        }
  
        var injections = this._typeInjections[type] || (this._typeInjections[type] = []);
  
        injections.push({
          property: property,
          fullName: fullName
        });
      }
docs: Used only via `injection`.
  Provides a specialized form of injection, specifically enabling
  all objects of one type to be injected with a reference to another
  object.
  For example, provided each object of type `controller` needed a `router`.
  one would do the following:
  ```javascript
  var registry = new Registry();
  var container = registry.container();
  registry.register('router:main', Router);
  registry.register('controller:user', UserController);
  registry.register('controller:post', PostController);
  registry.typeInjection('controller', 'router', 'router:main');
  var user = container.lookup('controller:user');
  var post = container.lookup('controller:post');
  user.router instanceof Router; //=> true
  post.router instanceof Router; //=> true
  both controllers share the same router
  user.router === post.router; //=> true
  ```
  @private
  @method typeInjection
  @param {String} type
  @param {String} property
  @param {String} fullName