##// END OF EJS Templates
code comments
code comments

File last commit:

r1:a51ea59f0423 default
r2:154d88dba49c default
Show More
DescriptorImpl.ts
63 lines | 1.7 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / DescriptorImpl.ts
cin
working on fluent configuration
r1 import { Descriptor, ILifetime, ConfigurableKeys, Resolver } from "./interfaces";
import { ActivationContext } from "./ActivationContext";
import { ContextResolver } from "./ContextResolver";
import { each } from "./traits";
export type RegistrationOverridesMap<S extends object> = { [k in ConfigurableKeys<S>]?: Descriptor<S, NonNullable<S[k]>> };
cin
initial commit
r0
export interface DescriptorImplArgs<S extends object, T> {
cin
working on fluent configuration
r1 lifetime: ILifetime<T>;
cin
initial commit
r0
factory: (resolve: Resolver<S>) => T;
cleanup?: (item: T) => void;
cin
working on fluent configuration
r1 overrides?: RegistrationOverridesMap<S>;
cin
initial commit
r0 }
cin
working on fluent configuration
r1
cin
initial commit
r0 export class DescriptorImpl<S extends object, T> implements Descriptor<S, T> {
cin
working on fluent configuration
r1 private readonly _overrides?: RegistrationOverridesMap<S>;
cin
initial commit
r0
cin
working on fluent configuration
r1 private readonly _lifetime: ILifetime<T>;
cin
initial commit
r0
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));
cin
working on fluent configuration
r1
const resolver = new ContextResolver(context);
cin
initial commit
r0
cin
working on fluent configuration
r1
const instance = this._factory.call(undefined, resolver.resolve.bind(resolver));
cin
initial commit
r0
this._lifetime.store(instance, this._cleanup);
return instance;
}
cin
working on fluent configuration
r1
cin
initial commit
r0 toString() {
cin
working on fluent configuration
r1 return `[object DescriptorImpl, lifetime=${String(this._lifetime)}]`;
cin
initial commit
r0 }
}