##// 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:

r135:03e32ec7c20b ioc ts support
r142:be7edf08a115 v1.4.0-rc3 default
Show More
DescriptorImpl.ts
63 lines | 1.9 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / di / fluent / DescriptorImpl.ts
import { Descriptor, PartialServiceMap, ILifetime, ContainerKeys } from "../interfaces";
import { ActivationContext } from "../ActivationContext";
import { each } from "../../safe";
import { DependencyOptions, LazyDependencyOptions, Resolver } from "./interfaces";
export interface DescriptorImplArgs<S extends object, T> {
lifetime: ILifetime;
factory: (resolve: Resolver<S>) => T;
cleanup?: (item: T) => void;
overrides?: PartialServiceMap<S>;
}
export class DescriptorImpl<S extends object, T> implements Descriptor<S, T> {
private readonly _overrides?: PartialServiceMap<S>;
private readonly _lifetime: ILifetime;
private readonly _factory: (resolve: Resolver<S>) => T;
private readonly _cleanup?: (item: T) => void;
constructor(args: DescriptorImplArgs<S, T>) {
this._lifetime = args.lifetime;
this._factory = args.factory;
if (args.cleanup)
this._cleanup = args.cleanup;
if (args.overrides)
this._overrides = args.overrides;
}
activate(context: ActivationContext<S>): T {
if (this._lifetime.has())
return this._lifetime.get();
this._lifetime.initialize(context);
if (this._overrides)
each(this._overrides, (v, k) => context.register(k, v));
const resolve = (name: ContainerKeys<S>, opts?: DependencyOptions | LazyDependencyOptions) => {
if (opts && "lazy" in opts && opts.lazy) {
const c2 = context.clone();
return () => {
return opts.optional ? c2.resolve(name, opts.default) : c2.resolve(name);
};
} else {
return opts && opts.optional ? context.resolve(name, opts.default) : context.resolve(name);
}
};
const instance = this._factory.call(undefined, resolve);
this._lifetime.store(instance, this._cleanup);
return instance;
}
}