UNPKG

ts-ioc-container

Version:
22 lines (21 loc) 793 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 { args = [] } = options; const key = this.cache.getKey(...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()));