Files
ios-client/IosClientKit/Sources/App/AppContainer.swift

50 lines
2.0 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}