ts-ioc-container
Version:
Typescript IoC container
26 lines (25 loc) • 994 B
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 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;