* @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 return value of the decor
(modulesToLoad, strictDi)
| 4540 | |
| 4541 | |
| 4542 | function createInjector(modulesToLoad, strictDi) { |
| 4543 | strictDi = (strictDi === true); |
| 4544 | var INSTANTIATING = {}, |
| 4545 | providerSuffix = 'Provider', |
| 4546 | path = [], |
| 4547 | loadedModules = new HashMap([], true), |
| 4548 | providerCache = { |
| 4549 | $provide: { |
| 4550 | provider: supportObject(provider), |
| 4551 | factory: supportObject(factory), |
| 4552 | service: supportObject(service), |
| 4553 | value: supportObject(value), |
| 4554 | constant: supportObject(constant), |
| 4555 | decorator: decorator |
| 4556 | } |
| 4557 | }, |
| 4558 | providerInjector = (providerCache.$injector = |
| 4559 | createInternalInjector(providerCache, function(serviceName, caller) { |
| 4560 | if (angular.isString(caller)) { |
| 4561 | path.push(caller); |
| 4562 | } |
| 4563 | throw $injectorMinErr('unpr', 'Unknown provider: {0}', path.join(' <- ')); |
| 4564 | })), |
| 4565 | instanceCache = {}, |
| 4566 | protoInstanceInjector = |
| 4567 | createInternalInjector(instanceCache, function(serviceName, caller) { |
| 4568 | var provider = providerInjector.get(serviceName + providerSuffix, caller); |
| 4569 | return instanceInjector.invoke( |
| 4570 | provider.$get, provider, undefined, serviceName); |
| 4571 | }), |
| 4572 | instanceInjector = protoInstanceInjector; |
| 4573 | |
| 4574 | providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) }; |
| 4575 | var runBlocks = loadModules(modulesToLoad); |
| 4576 | instanceInjector = protoInstanceInjector.get('$injector'); |
| 4577 | instanceInjector.strictDi = strictDi; |
| 4578 | forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); }); |
| 4579 | |
| 4580 | return instanceInjector; |
| 4581 | |
| 4582 | //////////////////////////////////// |
| 4583 | // $provider |
| 4584 | //////////////////////////////////// |
| 4585 | |
| 4586 | function supportObject(delegate) { |
| 4587 | return function(key, value) { |
| 4588 | if (isObject(key)) { |
| 4589 | forEach(key, reverseParams(delegate)); |
| 4590 | } else { |
| 4591 | return delegate(key, value); |
| 4592 | } |
| 4593 | }; |
| 4594 | } |
| 4595 | |
| 4596 | function provider(name, provider_) { |
| 4597 | assertNotHasOwnProperty(name, 'service'); |
| 4598 | if (isFunction(provider_) || isArray(provider_)) { |
| 4599 | provider_ = providerInjector.instantiate(provider_); |
no test coverage detected