UNPKG

ts-ioc-container

Version:
26 lines (25 loc) 994 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.singleton = exports.SingletonProvider = void 0; const IProvider_1 = require("./IProvider"); const Cache_1 = require("./Cache"); const ProviderPipe_1 = require("./ProviderPipe"); class SingletonProvider extends IProvider_1.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); } } exports.SingletonProvider = SingletonProvider; const singleton = (cacheProvider) => (0, ProviderPipe_1.registerPipe)((p) => new SingletonProvider(p, cacheProvider ? cacheProvider() : new Cache_1.SingleCache())); exports.singleton = singleton;