docs: function $controllerIntrospectorProvider() {
    var controllers = [];
    var controllersByName = {};
    var onControllerRegistered = null;
    return {
      register: function (name, constructor) {
        if (angular.isArray(constructor)) {
          constructor = constructor[constructor.length - 1];
        }
        controllersByName[name] = constructor;
        if (constructor.$routeConfig) {
          if (onControllerRegistered) {
            onControllerRegistered(name, constructor.$routeConfig);
          } else {
            controllers.push({name: name, config: constructor.$routeConfig});
          }
        }
      },
      $get: ['$componentMapper', function ($componentMapper) {
        var fn = function (newOnControllerRegistered) {
          onControllerRegistered = function (name, constructor) {
            name = $componentMapper.component(name);
            return newOnControllerRegistered(name, constructor);
          };
          while(controllers.length > 0) {
            var rule = controllers.pop();
            onControllerRegistered(rule.name, rule.config);
          }
        };
  
        fn.getTypeByName = function (name) {
          return controllersByName[name];
        };
  
        return fn;
      }]
    }
  }