ioc-lite
Version:
IoC Container library which helps to keep inversion of control principle by using DI pattern for javascript/typescript projects
46 lines • 1.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.IoCContainer = void 0;
const data_resource_1 = __importDefault(require("./resources/data.resource"));
const class_resource_1 = __importDefault(require("./resources/class.resource"));
class IoCContainer {
constructor() {
this._resources = new Map();
}
has(name) {
return this._resources.has(name);
}
_resolveResourceDependency(resourceName, dependencyName) {
if (this.has(dependencyName)) {
return this._resources.get(dependencyName).resolve();
}
throw new Error(`Can't find dependency '${String(dependencyName)}' for '${String(resourceName)}' resource`);
}
_registerResource(name, resource) {
if (this.has(name)) {
throw new Error(`${String(name)} resource is already registered in the container!`);
}
this._resources.set(name, resource);
}
register(name, entity) {
const resource = new data_resource_1.default(entity);
this._registerResource(name, resource);
return this;
}
registerClass(name, service) {
const resource = new class_resource_1.default(service, this._resolveResourceDependency.bind(this, name));
this._registerResource(name, resource);
return this;
}
resolve(name) {
if (this.has(name)) {
return this._resources.get(name).resolve();
}
return null;
}
}
exports.IoCContainer = IoCContainer;
//# sourceMappingURL=ioc-container.js.map