@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.
44 lines (43 loc) • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var deliveryError_1 = require("../errors/deliveryError");
/**
* Represenst an strategy to deliver a new instance targets per resolution with an specific strategy.
*/
var PerResolutionDeliveryStrategy = /** @class */ (function () {
function PerResolutionDeliveryStrategy() {
this._resolutionContextInstanceMap = [];
}
/**
* 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.
*/
PerResolutionDeliveryStrategy.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.');
}
var map = this._resolutionContextInstanceMap.find(function (map) { return map.context === resolutionContext; });
var servingResult;
if (!map) {
servingResult = dependencyMetadata.servicingStrategy.serve(resolutionContext, dependencyMetadata);
this._resolutionContextInstanceMap.push({ context: resolutionContext, instance: servingResult });
}
else {
servingResult = map.instance;
}
return servingResult;
};
return PerResolutionDeliveryStrategy;
}());
exports.PerResolutionDeliveryStrategy = PerResolutionDeliveryStrategy;