diff --git a/packages/common/src/config/ModuleContainer.ts b/packages/common/src/config/ModuleContainer.ts index 7424759c9..9041504ba 100644 --- a/packages/common/src/config/ModuleContainer.ts +++ b/packages/common/src/config/ModuleContainer.ts @@ -220,6 +220,12 @@ export class ModuleContainer return Object.prototype.hasOwnProperty.call(modules, moduleName); } + private isValidModuleNameTuple( + module: [string, BaseModuleType] + ): module is [StringKeyOf, BaseModuleType] { + return Object.prototype.hasOwnProperty.call(this.definition, module[0]); + } + public assertContainerInitialized( container: DependencyContainer | undefined ): asserts container is DependencyContainer { @@ -246,26 +252,26 @@ export class ModuleContainer * @param modules */ protected registerModules(modules: Modules) { - Object.keys(modules).forEach((moduleName) => { - if (Object.prototype.hasOwnProperty.call(modules, moduleName)) { - this.assertIsValidModuleName(moduleName); - - log.debug(`Registering module: ${moduleName}`); + const moduleClasses = Object.entries(modules).filter( + this.isValidModuleNameTuple.bind(this) + ); - const useClass = modules[moduleName]; + moduleClasses.forEach(([moduleName, useClass]) => { + log.debug(`Registering module: ${moduleName}`); - this.container.register( - moduleName, - { useClass }, - { lifecycle: Lifecycle.ContainerScoped } - ); - this.onAfterModuleResolution(moduleName); + this.container.register( + moduleName, + { useClass }, + { lifecycle: Lifecycle.ContainerScoped } + ); + this.onAfterModuleResolution(moduleName); - this.registerAliases(moduleName, useClass); + this.registerAliases(moduleName, useClass); + }); - if (this.isDependencyFactory(useClass)) { - this.useDependencyFactory(useClass, moduleName); - } + moduleClasses.forEach(([moduleName, clazz]) => { + if (this.isDependencyFactory(clazz)) { + this.useDependencyFactory(clazz, moduleName); } }); }