UNPKG

ts-ioc-container

Version:
27 lines (26 loc) 1.02 kB
"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 { 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); } } exports.SingletonProvider = SingletonProvider; const singleton = (cacheProvider) => (0, ProviderPipe_1.registerPipe)((p) => new SingletonProvider(p, cacheProvider ? cacheProvider() : new Cache_1.SingleCache())); exports.singleton = singleton;