* @ngdoc method * @name $provide#decorator * @description * * Register a **service decorator** with the auto.$injector $injector. A service decorator * intercepts the creation of a service, allowing it to override or modify the behaviour of the * service. The object returned by the dec
(modulesToLoad)
| 3784 | |
| 3785 | |
| 3786 | function createInjector(modulesToLoad) { |
| 3787 | var INSTANTIATING = {}, |
| 3788 | providerSuffix = 'Provider', |
| 3789 | path = [], |
| 3790 | loadedModules = new HashMap([], true), |
| 3791 | providerCache = { |
| 3792 | $provide: { |
| 3793 | provider: supportObject(provider), |
| 3794 | factory: supportObject(factory), |
| 3795 | service: supportObject(service), |
| 3796 | value: supportObject(value), |
| 3797 | constant: supportObject(constant), |
| 3798 | decorator: decorator |
| 3799 | } |
| 3800 | }, |
| 3801 | providerInjector = (providerCache.$injector = |
| 3802 | createInternalInjector(providerCache, function() { |
| 3803 | throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); |
| 3804 | })), |
| 3805 | instanceCache = {}, |
| 3806 | instanceInjector = (instanceCache.$injector = |
| 3807 | createInternalInjector(instanceCache, function(servicename) { |
| 3808 | var provider = providerInjector.get(servicename + providerSuffix); |
| 3809 | return instanceInjector.invoke(provider.$get, provider); |
| 3810 | })); |
| 3811 | |
| 3812 | |
| 3813 | forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); |
| 3814 | |
| 3815 | return instanceInjector; |
| 3816 | |
| 3817 | //////////////////////////////////// |
| 3818 | // $provider |
| 3819 | //////////////////////////////////// |
| 3820 | |
| 3821 | function supportObject(delegate) { |
| 3822 | return function(key, value) { |
| 3823 | if (isObject(key)) { |
| 3824 | forEach(key, reverseParams(delegate)); |
| 3825 | } else { |
| 3826 | return delegate(key, value); |
| 3827 | } |
| 3828 | }; |
| 3829 | } |
| 3830 | |
| 3831 | function provider(name, provider_) { |
| 3832 | assertNotHasOwnProperty(name, 'service'); |
| 3833 | if (isFunction(provider_) || isArray(provider_)) { |
| 3834 | provider_ = providerInjector.instantiate(provider_); |
| 3835 | } |
| 3836 | if (!provider_.$get) { |
| 3837 | throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); |
| 3838 | } |
| 3839 | return providerCache[name + providerSuffix] = provider_; |
| 3840 | } |
| 3841 | |
| 3842 | function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); } |
| 3843 |
no test coverage detected