import 'reflect-metadata'; import { container } from 'tsyringe'; // Repository import { UsersRepository } from '@repositories/users.repository'; // Service import { AuthService } from '@services/auth.service'; import { UsersService } from '@services/users.service'; // Controller import { AuthController } from '@controllers/auth.controller'; import { UsersController } from '@controllers/users.controller'; // Route import { AuthRoute } from '@routes/auth.route'; import { UsersRoute } from '@routes/users.route'; let isContainerInitialized = false; export function setupContainer() { if (isContainerInitialized) return; // πŸ“Š Infrastructure Layer - λͺ…μ‹œμ  관리 (μ•ˆμ •μ„± μš°μ„ ) const usersRepository = new UsersRepository(); container.registerInstance(UsersRepository, usersRepository); // πŸ“ˆ Business Layer - λͺ…μ‹œμ  관리 (μ˜μ‘΄μ„± λ³΅μž‘λ„ κ³ λ €) const authService = new AuthService(usersRepository); const usersService = new UsersService(usersRepository); container.registerInstance(AuthService, authService); container.registerInstance(UsersService, usersService); // 🎨 Presentation Layer - μžλ™ μ£Όμž… (νŽΈμ˜μ„± μš°μ„ ) container.registerSingleton(AuthController); container.registerSingleton(UsersController); container.registerSingleton(AuthRoute); container.registerSingleton(UsersRoute); isContainerInitialized = true; }