50 lines
2.0 KiB
Swift
50 lines
2.0 KiB
Swift
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)
|
||
}
|
||
}
|