@baizey/dependency-injection
Version:
A simple typescript dependency injection
74 lines (73 loc) • 2.47 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SingletonLifetime = void 0;
exports.singleton = singleton;
var SingletonLifetime = /** @class */ (function () {
function SingletonLifetime(name, factory) {
Object.defineProperty(this, "factory", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "name", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "isSingleton", {
enumerable: true,
configurable: true,
writable: true,
value: true
});
this.name = name;
this.factory = factory;
}
Object.defineProperty(SingletonLifetime.prototype, "provide", {
enumerable: false,
configurable: true,
writable: true,
value: function (provider, context) {
var instances = provider.instances;
if (!(this.name in instances))
instances[this.name] = this.factory(provider.createProxy(context), undefined, provider, context);
return instances[this.name];
}
});
Object.defineProperty(SingletonLifetime.prototype, "validate", {
enumerable: false,
configurable: true,
writable: true,
value: function (provider, context) {
return this.provide(provider, context);
}
});
Object.defineProperty(SingletonLifetime.prototype, "clone", {
enumerable: false,
configurable: true,
writable: true,
value: function () {
return new SingletonLifetime(this.name, this.factory);
}
});
return SingletonLifetime;
}());
exports.SingletonLifetime = SingletonLifetime;
function singleton(dep) {
return typeof dep === 'function'
? { lifetime: SingletonLifetime, constructor: dep }
: __assign({ lifetime: SingletonLifetime }, dep);
}