@jems/di
Version:
An implementation of IoC pattern based on dependency injection that allows you to granulate and decouple your libraries or applications. Wrote using SOLID principles and a variety OOP patterns implementations.
38 lines (37 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var deliveryError_1 = require("../errors/deliveryError");
/**
* Represenst an strategy to deliver the same instance targets with an specific strategy.
*/
var SingletonDeliveryStrategy = /** @class */ (function () {
function SingletonDeliveryStrategy() {
}
/**
* Deliver the transformed reference in the provided dependency metadata.
* @param resolutionContext Represents the context in which the request was made.
* @param dependencyMetadata Represents the dependency metadata that will be delivered.
* @return The transformed reference.
*/
SingletonDeliveryStrategy.prototype.deliver = function (resolutionContext, dependencyMetadata) {
if (!resolutionContext) {
throw new deliveryError_1.DeliveryError('Must provide a valid resolution context.');
}
if (!dependencyMetadata) {
throw new deliveryError_1.DeliveryError('Must provide the depencency metadata to deliver from.');
}
if (!dependencyMetadata.activationReference) {
throw new deliveryError_1.DeliveryError('The provided dependency metadata must have a valid reference.');
}
if (!dependencyMetadata.servicingStrategy) {
throw new deliveryError_1.DeliveryError('The provided dependency metadata must have a valid servicing strategy.');
}
if (!this._isServed) {
this._instance = dependencyMetadata.servicingStrategy.serve(resolutionContext, dependencyMetadata);
this._isServed = true;
}
return this._instance;
};
return SingletonDeliveryStrategy;
}());
exports.SingletonDeliveryStrategy = SingletonDeliveryStrategy;