##// END OF EJS Templates
minor fixes, code cleanup...
minor fixes, code cleanup start porting IoC container to ts

File last commit:

r0:6a5387d69bf1 default
r33:58f57bdfc295 di-typescript
Show More
ReferenceDescriptor.js
89 lines | 2.8 KiB | application/javascript | JavascriptLexer
/ src / js / di / ReferenceDescriptor.js
define([
"../declare", "../safe", "./Descriptor", "./ActivationError", "./ValueDescriptor"
],
function(declare, safe, Descriptor, ActivationError, Value) {
return declare(Descriptor, {
_name : null,
_lazy : false,
_optional : false,
_default : undefined,
constructor : function(name, lazy, optional, def, services) {
safe.argumentNotEmptyString(name, "name");
this._name = name;
this._lazy = Boolean(lazy);
this._optional = Boolean(optional);
this._default = def;
this._services = services;
},
activate : function(context, name) {
var me = this;
context.enter(name, this, true);
// добавляем сервисы
if (me._services) {
for ( var p in me._services) {
var sv = me._services[p];
context.register(p, sv instanceof Descriptor ? sv : new Value(sv, false));
}
}
if (me._lazy) {
// сохраняем контекст активации
context = context.clone();
return function(cfg) {
// защищаем контекст на случай исключения в процессе
// активации
var ct = context.clone();
try {
if (cfg)
safe.each(cfg, function(v, k) {
ct.register(k, v instanceof Descriptor ? v : new Value(v, false));
});
return me._optional ? ct.getService(me._name, me._default) : ct
.getService(me._name);
} catch (error) {
throw new ActivationError(me._name, ct.getStack(), error);
}
};
}
var v = me._optional ? context.getService(me._name, me._default) : context
.getService(me._name);
context.leave(me);
return v;
},
isInstanceCreated : function() {
return false;
},
toString : function() {
var opts = [];
if (this._optional)
opts.push("optional");
if (this._lazy)
opts.push("lazy");
var parts = [
"@ref "
];
if (opts.length) {
parts.push("{");
parts.push(opts.join());
parts.push("} ");
}
parts.push(this._name);
if (!safe.isNull(this._default)) {
parts.push(" = ");
parts.push(this._default);
}
return parts.join("");
}
});
});