ts-bakery
Version:
Baked dependency injection for Typescript.
50 lines • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Paths_1 = require("../Util/Paths");
const DependencyContainer_1 = require("./DependencyContainer");
const ManualInjector_1 = require("./ManualInjector");
class DependencyResolver {
constructor() {
this.modules = [];
this.moduleNames = new Set();
this.container = new DependencyContainer_1.default();
ManualInjector_1.default.setResolver(this);
}
build() {
this.validatePaths();
this.registerModules();
this.buildRegistrations();
this.instantiateFromRegistrations();
this.callPostResolvables();
}
manualInject(instance) {
this.container.manualInject(instance);
}
registerModule(constructor) {
if (this.moduleNames.has(constructor.name)) {
throw new Error(`Module with name ${constructor.name} has already been registered.`);
}
this.moduleNames.add(constructor.name);
const module = new constructor();
this.modules.push(module);
}
validatePaths() {
Paths_1.default.validate();
}
buildRegistrations() {
const allRegistrations = [];
for (const module of this.modules) {
const regs = module.buildRegistrations();
allRegistrations.push(...regs);
}
this.container.registerDependencies(allRegistrations);
}
instantiateFromRegistrations() {
this.container.instantiateFromRegistrations();
}
callPostResolvables() {
this.container.callPostResolvables();
}
}
exports.default = DependencyResolver;
//# sourceMappingURL=DependencyResolver.js.map