Skip to content

Instantly share code, notes, and snippets.

@gavrilaf
Created December 4, 2020 06:57
Show Gist options
  • Save gavrilaf/d4b40153b7fc853de6839f41fd376b2c to your computer and use it in GitHub Desktop.
Save gavrilaf/d4b40153b7fc853de6839f41fd376b2c to your computer and use it in GitHub Desktop.
final class AppAssembly {
// private service
private lazy var healthcheckProvider: HealthcheckProvider = { HealthcheckService(executor: resolve()) }()
private lazy var authProvider: AuthProvider = { AuthService() }()
private lazy var reviewProvider: ReviewProvider = { ReviewService(executor: resolve()) }()
private lazy var followProvider: FollowProvider = { FollowService(executor: resolve()) }()
private lazy var visionProvider: VisionProvider = { VisionService() }()
private lazy var classifyingModel: ClassifyingModel = { ClassifyingModelBayes() }()
private lazy var appRouter: AppRouter = { AppRouter() }()
private lazy var userProfileProvider: ProfileProvider = { ProfileService(executor: resolve(),
imageProcessor: resolve()) }()
private lazy var profileProvider: ProfileUpdater = { ProfileUpdater(profileProvider: resolve(),
session: resolve()) }()
private lazy var uploadStorageProvider: JobsDBProvider = {
do {
return try UploadDatabaseWrapper(dbName: "upload_storage.sqlite")
}
catch {
fatalError("DB initialization error \(error.localizedDescription)")
}
}()
// internal service
lazy var geocodingProvider: GeocodingProvider = { GeocodingService(executor: requestExecutor) }()
lazy var galleryProvider: GalleryProvider = { GalleryService() }()
lazy var settingsProvider: AppSettingsProvider = { AppSettingsUserDefaults() }()
lazy var storage: Storage = { Storage() }()
}
// API and services layer
extension AppAssembly {
// private
private func resolve() -> RequestExecutor { requestExecutor }
private func resolve() -> JobsDBProvider { uploadStorageProvider }
private func resolve() -> UploadAPIAdapter { uploadAPIAdapter }
// internal
func resolve() -> LinkHandler { linkHandler }
func resolve() -> AppRouter { appRouter }
func resolve() -> Storage { storage }
func resolve() -> FollowProvider { followProvider }
func resolve() -> UserSession { userSession }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment