##// END OF EJS Templates
added provided and configure methods to the fluent container configuration, added applyConfig method to the container
added provided and configure methods to the fluent container configuration, added applyConfig method to the container

File last commit:

r134:511bcc634d65 ioc ts support
r142:be7edf08a115 v1.4.0-rc3 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("");
}
}