import CoreDomain import CoreModel import CoreRepository import FeatureAuth import FeatureCheckin import FeatureHome import FeaturePlan import FeatureProfile /// 手写组合根 / DI 容器(对应 Android Hilt 的 AppContainer)。 @MainActor public enum AppContainer { // 共享的有状态仓库(登录态、打卡、计划可提交,需跨页面共享单例)。 private static let sessionRepository: SessionRepository = FakeSessionRepository() private static let checkinRepository: CheckinRepository = FakeCheckinRepository() private static let planRepository: PlanRepository = FakePlanRepository() private static let sessionUseCase = SessionUseCase(repository: sessionRepository) private static let checkinUseCase = CheckinUseCase(repository: checkinRepository) private static let planUseCase = PlanUseCase(repository: planRepository) public static func makeHomeViewModel() -> HomeViewModel { let repository: HomeRepository = FakeHomeRepository() let useCase = HomeUseCase(repository: repository) return HomeViewModel(homeUseCase: useCase, sessionUseCase: sessionUseCase) } public static func makeCheckinViewModel() -> CheckinViewModel { CheckinViewModel(checkinUseCase: checkinUseCase, sessionUseCase: sessionUseCase) } public static func makePlanViewModel() -> PlanViewModel { PlanViewModel(planUseCase: planUseCase, sessionUseCase: sessionUseCase) } public static func makeProfileViewModel() -> ProfileViewModel { let repository: ProfileRepository = FakeProfileRepository() let useCase = ProfileUseCase(repository: repository) return ProfileViewModel(profileUseCase: useCase, sessionUseCase: sessionUseCase) } public static func makeAuthViewModel() -> AuthViewModel { AuthViewModel(sessionUseCase: sessionUseCase) } public static func makePlanSubmitViewModel(type: PlanType, periodKey: String) -> PlanSubmitViewModel { PlanSubmitViewModel(planUseCase: planUseCase, type: type, periodKey: periodKey) } }