@baizey/dependency-injection
Version:
A simple typescript dependency injection
58 lines (57 loc) • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceProvider = void 0;
var utils_1 = require("../utils");
var ServiceProvider = /** @class */ (function () {
function ServiceProvider(lifetimes) {
Object.defineProperty(this, "instances", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "lifetimes", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "proxy", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.instances = {};
this.lifetimes = lifetimes;
this.proxy = new Proxy(this, { get: function (t, p) { return t.provide(p); } });
}
Object.defineProperty(ServiceProvider.prototype, "createProxy", {
enumerable: false,
configurable: true,
writable: true,
value: function (context) {
var _a;
return (_a = context === null || context === void 0 ? void 0 : context.proxy) !== null && _a !== void 0 ? _a : this.proxy;
}
});
Object.defineProperty(ServiceProvider.prototype, "provide", {
enumerable: false,
configurable: true,
writable: true,
value: function (selector, context) {
var _a;
var key = (0, utils_1.extractSelector)(selector);
var stored = (_a = context === null || context === void 0 ? void 0 : context.instances[key]) !== null && _a !== void 0 ? _a : this.instances[key];
if (stored !== undefined)
return stored;
if (context === undefined) {
context = { instances: {} };
context.proxy = new Proxy(this, { get: function (t, p) { return t.provide(p, context); } });
}
return this.lifetimes[key].provide(this, context);
}
});
return ServiceProvider;
}());
exports.ServiceProvider = ServiceProvider;