* @ngdoc method * @name AUTO.$provide#decorator * @methodOf AUTO.$provide * @description * * Decoration of service, allows the decorator to intercept the service instance creation. The * returned instance may be the original instance, or a new instance which delegates to the * original instan
(modulesToLoad)
| 2716 | |
| 2717 | |
| 2718 | function createInjector(modulesToLoad) { |
| 2719 | var INSTANTIATING = {}, |
| 2720 | providerSuffix = 'Provider', |
| 2721 | path = [], |
| 2722 | loadedModules = new HashMap(), |
| 2723 | providerCache = { |
| 2724 | $provide: { |
| 2725 | provider: supportObject(provider), |
| 2726 | factory: supportObject(factory), |
| 2727 | service: supportObject(service), |
| 2728 | value: supportObject(value), |
| 2729 | constant: supportObject(constant), |
| 2730 | decorator: decorator |
| 2731 | } |
| 2732 | }, |
| 2733 | providerInjector = createInternalInjector(providerCache, function() { |
| 2734 | throw Error("Unknown provider: " + path.join(' <- ')); |
| 2735 | }), |
| 2736 | instanceCache = {}, |
| 2737 | instanceInjector = (instanceCache.$injector = |
| 2738 | createInternalInjector(instanceCache, function(servicename) { |
| 2739 | var provider = providerInjector.get(servicename + providerSuffix); |
| 2740 | return instanceInjector.invoke(provider.$get, provider); |
| 2741 | })); |
| 2742 | |
| 2743 | |
| 2744 | forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); |
| 2745 | |
| 2746 | return instanceInjector; |
| 2747 | |
| 2748 | //////////////////////////////////// |
| 2749 | // $provider |
| 2750 | //////////////////////////////////// |
| 2751 | |
| 2752 | function supportObject(delegate) { |
| 2753 | return function(key, value) { |
| 2754 | if (isObject(key)) { |
| 2755 | forEach(key, reverseParams(delegate)); |
| 2756 | } else { |
| 2757 | return delegate(key, value); |
| 2758 | } |
| 2759 | } |
| 2760 | } |
| 2761 | |
| 2762 | function provider(name, provider_) { |
| 2763 | if (isFunction(provider_) || isArray(provider_)) { |
| 2764 | provider_ = providerInjector.instantiate(provider_); |
| 2765 | } |
| 2766 | if (!provider_.$get) { |
| 2767 | throw Error('Provider ' + name + ' must define $get factory method.'); |
| 2768 | } |
| 2769 | return providerCache[name + providerSuffix] = provider_; |
| 2770 | } |
| 2771 | |
| 2772 | function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } |
| 2773 | |
| 2774 | function service(name, constructor) { |
| 2775 | return factory(name, ['$injector', function($injector) { |
no test coverage detected