UNPKG

ts-ioc-container

Version:
21 lines (20 loc) 762 B
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()));