* @ngdoc method * @name $provide#decorator * @description * * Register a **decorator function** with the auto.$injector $injector. A decorator function * intercepts the creation of a service, allowing it to override or modify the behavior of the * service. The r
(modulesToLoad, strictDi)
| 5066 | |
| 5067 | |
| 5068 | function createInjector(modulesToLoad, strictDi) { |
| 5069 | strictDi = (strictDi === true); |
| 5070 | var INSTANTIATING = {}, |
| 5071 | providerSuffix = 'Provider', |
| 5072 | path = [], |
| 5073 | loadedModules = new NgMap(), |
| 5074 | providerCache = { |
| 5075 | $provide: { |
| 5076 | provider: supportObject(provider), |
| 5077 | factory: supportObject(factory), |
| 5078 | service: supportObject(service), |
| 5079 | value: supportObject(value), |
| 5080 | constant: supportObject(constant), |
| 5081 | decorator: decorator |
| 5082 | } |
| 5083 | }, |
| 5084 | providerInjector = (providerCache.$injector = |
| 5085 | createInternalInjector(providerCache, function (serviceName, caller) { |
| 5086 | if (angular.isString(caller)) { |
| 5087 | path.push(caller); |
| 5088 | } |
| 5089 | throw $injectorMinErr('unpr', 'Unknown provider: {0}', path.join(' <- ')); |
| 5090 | })), |
| 5091 | instanceCache = {}, |
| 5092 | protoInstanceInjector = |
| 5093 | createInternalInjector(instanceCache, function (serviceName, caller) { |
| 5094 | var provider = providerInjector.get(serviceName + providerSuffix, caller); |
| 5095 | return instanceInjector.invoke( |
| 5096 | provider.$get, provider, undefined, serviceName); |
| 5097 | }), |
| 5098 | instanceInjector = protoInstanceInjector; |
| 5099 | |
| 5100 | providerCache['$injector' + providerSuffix] = { |
| 5101 | $get: valueFn(protoInstanceInjector) |
| 5102 | }; |
| 5103 | instanceInjector.modules = providerInjector.modules = createMap(); |
| 5104 | var runBlocks = loadModules(modulesToLoad); |
| 5105 | instanceInjector = protoInstanceInjector.get('$injector'); |
| 5106 | instanceInjector.strictDi = strictDi; |
| 5107 | forEach(runBlocks, function (fn) { |
| 5108 | if (fn) instanceInjector.invoke(fn); |
| 5109 | }); |
| 5110 | |
| 5111 | instanceInjector.loadNewModules = function (mods) { |
| 5112 | forEach(loadModules(mods), function (fn) { |
| 5113 | if (fn) instanceInjector.invoke(fn); |
| 5114 | }); |
| 5115 | }; |
| 5116 | |
| 5117 | |
| 5118 | return instanceInjector; |
| 5119 | |
| 5120 | //////////////////////////////////// |
| 5121 | // $provider |
| 5122 | //////////////////////////////////// |
| 5123 | |
| 5124 | function supportObject(delegate) { |
| 5125 | return function (key, value) { |
no test coverage detected