* @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 behavior of the * service. The object returned by the deco
(modulesToLoad, strictDi)
| 4374 | |
| 4375 | |
| 4376 | function createInjector(modulesToLoad, strictDi) { |
| 4377 | strictDi = (strictDi === true); |
| 4378 | var INSTANTIATING = {}, |
| 4379 | providerSuffix = 'Provider', |
| 4380 | path = [], |
| 4381 | loadedModules = new HashMap([], true), |
| 4382 | providerCache = { |
| 4383 | $provide: { |
| 4384 | provider: supportObject(provider), |
| 4385 | factory: supportObject(factory), |
| 4386 | service: supportObject(service), |
| 4387 | value: supportObject(value), |
| 4388 | constant: supportObject(constant), |
| 4389 | decorator: decorator |
| 4390 | } |
| 4391 | }, |
| 4392 | providerInjector = (providerCache.$injector = |
| 4393 | createInternalInjector(providerCache, function(serviceName, caller) { |
| 4394 | if (angular.isString(caller)) { |
| 4395 | path.push(caller); |
| 4396 | } |
| 4397 | throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); |
| 4398 | })), |
| 4399 | instanceCache = {}, |
| 4400 | protoInstanceInjector = |
| 4401 | createInternalInjector(instanceCache, function(serviceName, caller) { |
| 4402 | var provider = providerInjector.get(serviceName + providerSuffix, caller); |
| 4403 | return instanceInjector.invoke( |
| 4404 | provider.$get, provider, undefined, serviceName); |
| 4405 | }), |
| 4406 | instanceInjector = protoInstanceInjector; |
| 4407 | |
| 4408 | providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) }; |
| 4409 | var runBlocks = loadModules(modulesToLoad); |
| 4410 | instanceInjector = protoInstanceInjector.get('$injector'); |
| 4411 | instanceInjector.strictDi = strictDi; |
| 4412 | forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); }); |
| 4413 | |
| 4414 | return instanceInjector; |
| 4415 | |
| 4416 | //////////////////////////////////// |
| 4417 | // $provider |
| 4418 | //////////////////////////////////// |
| 4419 | |
| 4420 | function supportObject(delegate) { |
| 4421 | return function(key, value) { |
| 4422 | if (isObject(key)) { |
| 4423 | forEach(key, reverseParams(delegate)); |
| 4424 | } else { |
| 4425 | return delegate(key, value); |
| 4426 | } |
| 4427 | }; |
| 4428 | } |
| 4429 | |
| 4430 | function provider(name, provider_) { |
| 4431 | assertNotHasOwnProperty(name, 'service'); |
| 4432 | if (isFunction(provider_) || isArray(provider_)) { |
| 4433 | provider_ = providerInjector.instantiate(provider_); |
no test coverage detected