diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Injector.js | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/Injector.js b/src/Injector.js index 8df47306..517e3e00 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -251,7 +251,8 @@ function createInjector(modulesToLoad, moduleRegistry) { value('$provide', { service: service, factory: factory, - value: value + value: value, + decorator: decorator }); loadModule(modulesToLoad); @@ -274,6 +275,18 @@ function createInjector(modulesToLoad, moduleRegistry) { function value(name, value) { factory(name, valueFn(value)); } + function decorator(name, decorFn) { + var origProvider = cache['#' + name + providerSuffix]; + if (!origProvider) throw Error("Can't find provider for: " + name); + if (cache['#' + name]) throw Error("Service " + name + " already instantiated, can't decorate!"); + var orig$get = origProvider.$get; + origProvider.$get = function() { + var origInstance = $injector.invoke(origProvider, orig$get); + return $injector.invoke(null, decorFn, {$delegate: origInstance}); + }; + } + + function getService(value) { if (typeof value !== 'string') { throw Error('Service name expected'); |
