diff src/implab/di/ActivationContext.js @ 34:27e8e9e38e07 default tip

Слияние
author nickolay
date Wed, 05 Jun 2019 20:44:15 +0300
parents 8af8e840dd49 1dc2fd263b90
children
line wrap: on
line diff
--- a/src/implab/di/ActivationContext.js	Wed Jun 05 17:44:17 2019 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-define([
-    "../declare",
-    "../safe",
-    "./Descriptor",
-    "./ValueDescriptor",
-    "../log/trace!"
-], function (declare, safe, Descriptor, Value, trace) {
-    var Context = declare(null, {
-
-        _cache: null,
-
-        _services: null,
-
-        _stack: null,
-
-        _visited: null,
-
-        container: null,
-
-        _trace: true,
-
-        constructor: function (container, services, cache, visited) {
-            safe.argumentNotNull(container, "container");
-            safe.argumentNotNull(services, "services");
-
-            this._visited = visited || {};
-            this._stack = [];
-            this._cache = cache || {};
-            this._services = services;
-            this.container = container;
-        },
-
-        getService: function (name, def) {
-            var d = this._services[name];
-
-            if (!d)
-                if (arguments.length > 1)
-                    return def;
-                else
-                    throw new Error("Service '" + name + "' not found");
-
-            return d.activate(this, name);
-        },
-
-        /**
-         * registers services local to the the activation context
-         * 
-         * @name{string} the name of the service
-         * @service{string} the service descriptor to register
-         */
-        register: function (name, service) {
-            safe.argumentNotEmptyString(name, "name");
-
-            if (!(service instanceof Descriptor))
-                service = new Value(service, true);
-            this._services[name] = service;
-        },
-
-        clone: function () {
-            return new Context(
-                this.container,
-                Object.create(this._services),
-                this._cache,
-                this._visited
-            );
-
-        },
-
-        has: function (id) {
-            return id in this._cache;
-        },
-
-        get: function (id) {
-            return this._cache[id];
-        },
-
-        store: function (id, value) {
-            return (this._cache[id] = value);
-        },
-
-        parse: function (data, name) {
-            var me = this;
-            if (safe.isPrimitive(data))
-                return data;
-
-            if (data instanceof Descriptor) {
-                return data.activate(this, name);
-            } else if (data instanceof Array) {
-                me.enter(name);
-                var v = data.map(function (x, i) {
-                    return me.parse(x, "." + i);
-                });
-                me.leave();
-                return v;
-            } else {
-                me.enter(name);
-                var result = {};
-                for (var p in data)
-                    result[p] = me.parse(data[p], "." + p);
-                me.leave();
-                return result;
-            }
-        },
-
-        visit: function (id) {
-            var count = this._visited[id] || 0;
-            this._visited[id] = count + 1;
-            return count;
-        },
-
-        getStack: function () {
-            return this._stack.slice().reverse();
-        },
-
-        enter: function (name, d, localize) {
-            if (this._trace)
-                trace.log("enter " + name + " " + (d || "") +
-                    (localize ? " localize" : ""));
-            this._stack.push({
-                name: name,
-                service: d,
-                scope: this._services
-            });
-            if (localize)
-                this._services = Object.create(this._services);
-        },
-
-        leave: function () {
-            var ctx = this._stack.pop();
-            this._services = ctx.scope;
-
-            if (this._trace)
-                trace.log("leave " + ctx.name + " " + (ctx.service || ""));
-        }
-    });
-
-    return Context;
-});
\ No newline at end of file