aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Injector.js15
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');