@apiratorjs/di-container
Version:
A lightweight dependency injection container for JavaScript and TypeScript with powerful features: modular organization with DiModule.create, lazy initialization, automatic circular dependency detection, and multiple service lifecycles (singleton with bot
44 lines • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiModule = void 0;
class DiModule {
constructor(options) {
this.options = options;
}
static create(options) {
return new DiModule(options);
}
register(configurator) {
if (this.options.imports) {
for (const importedModule of this.options.imports) {
configurator.addModule(importedModule);
}
}
if (this.options.providers) {
for (const provider of this.options.providers) {
this.registerProvider(provider, configurator);
}
}
}
registerProvider(provider, configurator) {
const { token, useFactory, lifetime } = provider;
this.registerByLifetime(token, useFactory, lifetime, configurator);
}
registerByLifetime(token, factory, lifetime, configurator) {
switch (lifetime) {
case "singleton":
configurator.addSingleton(token, factory);
break;
case "scoped":
configurator.addScoped(token, factory);
break;
case "transient":
configurator.addTransient(token, factory);
break;
default:
throw new Error(`Unknown lifetime: ${lifetime}`);
}
}
}
exports.DiModule = DiModule;
//# sourceMappingURL=di-module.js.map