ts-ioc-container
Version:
Typescript IoC container
21 lines (20 loc) • 762 B
JavaScript
import { ProviderDecorator } from './IProvider';
import { SingleCache } from './Cache';
import { registerPipe } from './ProviderPipe';
export class SingletonProvider extends ProviderDecorator {
provider;
cache;
constructor(provider, cache) {
super(provider);
this.provider = provider;
this.cache = cache;
}
resolve(container, options) {
const key = this.cache.getKey(...options.args);
if (!this.cache.hasValue(key)) {
this.cache.setValue(key, this.provider.resolve(container, options));
}
return this.cache.getValue(key);
}
}
export const singleton = (cacheProvider) => registerPipe((p) => new SingletonProvider(p, cacheProvider ? cacheProvider() : new SingleCache()));