##// END OF EJS Templates
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version

File last commit:

r134:511bcc634d65 ioc ts support
r146:f3f5c56d3b3e v1.4.0-rc5 default
Show More
ReferenceDescriptor.ts
88 lines | 2.4 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / di / ReferenceDescriptor.ts
import { argumentNotEmptyString, each } from "../safe";
import { ActivationContext } from "./ActivationContext";
import { Descriptor, PartialServiceMap, TypeOfService, ContainerKeys } from "./interfaces";
export interface ReferenceDescriptorParams<S extends object, K extends ContainerKeys<S>> {
/**
* The name of the descriptor
*/
name: K;
/**
* The flag that indicates that the referenced service isn't required to exist.
* If the reference is optional and the referenced service doesn't exist,
* the undefined or a default value will be returned.
*/
optional?: boolean;
/**
* a default value for the reference when the referenced service doesn't exist.
*/
default?: TypeOfService<S, K>;
/**
* The service overrides
*/
services?: PartialServiceMap<S>;
}
export class ReferenceDescriptor<S extends object = any, K extends ContainerKeys<S> = ContainerKeys<S>>
implements Descriptor<S, TypeOfService<S, K>> {
_name: K;
_optional = false;
_default: TypeOfService<S, K> | undefined;
_services: PartialServiceMap<S>;
constructor(opts: ReferenceDescriptorParams<S, K>) {
argumentNotEmptyString(opts && opts.name, "opts.name");
this._name = opts.name;
this._optional = !!opts.optional;
this._default = opts.default;
this._services = (opts.services || {}) as PartialServiceMap<S>;
}
/** This method activates the referenced service if one exists
* @param context activation context which is used during current activation
*/
activate(context: ActivationContext<S>): any {
// добавляем сервисы
if (this._services) {
each(this._services, (v, k) => context.register(k, v));
}
const res = this._optional ?
context.resolve(this._name, this._default) :
context.resolve(this._name);
return res;
}
toString() {
const opts = [];
if (this._optional)
opts.push("optional");
const parts = [
"@ref "
];
if (opts.length) {
parts.push("{");
parts.push(opts.join());
parts.push("} ");
}
parts.push(this._name.toString());
if (this._default !== undefined && this._default !== null) {
parts.push(" = ");
parts.push(String(this._default));
}
return parts.join("");
}
}