UNPKG

origintrail-node

Version:

OriginTrail Node - Decentralized Knowledge Graph Node Library

92 lines (76 loc) 3.4 kB
import awilix from 'awilix'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); class DependencyInjection { static async initialize() { console.log('[DI] Starting dependency injection initialization...'); const container = awilix.createContainer({ injectionMode: awilix.InjectionMode.PROXY, }); console.log('[DI] Container created with PROXY injection mode'); // Get the package root directory (two levels up from this file) const packageRoot = path.resolve(__dirname, '..', '..'); console.log('[DI] Package root directory:', packageRoot); const modulePatterns = [ path.join(packageRoot, 'src/controllers/**/*.js'), path.join(packageRoot, 'src/service/*.js'), path.join(packageRoot, 'src/commands/**/**/**/*.js'), path.join(packageRoot, 'src/commands/*.js'), path.join(packageRoot, 'src/modules/base-module-manager.js'), path.join(packageRoot, 'src/modules/**/*module-manager.js'), ]; console.log('[DI] Loading modules with patterns:', modulePatterns); try { await container.loadModules(modulePatterns, { esModules: true, formatName: 'camelCase', resolverOptions: { lifetime: awilix.Lifetime.SINGLETON, register: awilix.asClass, }, }); console.log('[DI] Modules loaded successfully'); console.log('[DI] Registered modules:', Object.keys(container.registrations)); // Log specific module managers const moduleManagers = Object.keys(container.registrations).filter((name) => name.includes('ModuleManager'), ); console.log('[DI] Module managers found:', moduleManagers); // Check for autoUpdaterModuleManager specifically if (container.registrations.autoUpdaterModuleManager) { console.log('[DI] ✓ autoUpdaterModuleManager is registered'); } else { console.log('[DI] ✗ autoUpdaterModuleManager is NOT registered'); } // Test resolving some key modules const testModules = [ 'config', 'logger', 'autoUpdaterModuleManager', 'blockchainModuleManager', ]; for (const moduleName of testModules) { try { console.log(`[DI] ✓ Successfully resolved: ${moduleName}`); } catch (error) { console.log(`[DI] ✗ Failed to resolve ${moduleName}: ${error.message}`); } } } catch (error) { console.error('[DI] Error loading modules:', error); throw error; } console.log('[DI] Dependency injection initialization completed'); return container; } static registerValue(container, valueName, value) { console.log(`[DI] Registering value: ${valueName}`); container.register({ [valueName]: awilix.asValue(value), }); console.log(`[DI] ✓ Registered: ${valueName}`); } } export default DependencyInjection;