ts-ioc-container
Version:
Typescript IoC container
27 lines (26 loc) • 1.02 kB
JavaScript
;
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;