import 'package:get_it/get_it.dart'; import 'package:dio/dio.dart'; import '../network/api_client.dart'; import '../network/interceptors.dart'; import '../../data/datasources/local/cache_manager.dart'; import '../../data/datasources/remote/auth_remote_datasource.dart'; import '../../data/datasources/remote/mining_remote_datasource.dart'; import '../../data/datasources/remote/trading_remote_datasource.dart'; import '../../data/datasources/remote/contribution_remote_datasource.dart'; import '../../data/datasources/remote/referral_remote_datasource.dart'; import '../../data/repositories/mining_repository_impl.dart'; import '../../data/repositories/trading_repository_impl.dart'; import '../../data/repositories/contribution_repository_impl.dart'; import '../../domain/repositories/mining_repository.dart'; import '../../domain/repositories/trading_repository.dart'; import '../../domain/repositories/contribution_repository.dart'; import '../../domain/usecases/mining/get_share_account.dart'; import '../../domain/usecases/mining/get_global_state.dart'; import '../../domain/usecases/contribution/get_user_contribution.dart'; final getIt = GetIt.instance; Future configureDependencies() async { // Dio final dio = Dio(); dio.interceptors.add(LoggingInterceptor()); getIt.registerSingleton(dio); // API Client getIt.registerSingleton(ApiClient(dio: getIt())); // Cache Manager getIt.registerSingleton(CacheManager()); // Data Sources getIt.registerLazySingleton( () => MiningRemoteDataSourceImpl(client: getIt()), ); getIt.registerLazySingleton( () => TradingRemoteDataSourceImpl(client: getIt()), ); getIt.registerLazySingleton( () => ContributionRemoteDataSourceImpl(client: getIt()), ); // Auth Data Source getIt.registerLazySingleton( () => AuthRemoteDataSourceImpl(client: getIt()), ); // Referral Data Source getIt.registerLazySingleton( () => ReferralRemoteDataSourceImpl(client: getIt()), ); // Repositories getIt.registerLazySingleton( () => MiningRepositoryImpl( remoteDataSource: getIt(), cacheManager: getIt(), ), ); getIt.registerLazySingleton( () => TradingRepositoryImpl( remoteDataSource: getIt(), ), ); getIt.registerLazySingleton( () => ContributionRepositoryImpl( remoteDataSource: getIt(), ), ); // Use Cases - Mining getIt.registerLazySingleton(() => GetShareAccount(getIt())); getIt.registerLazySingleton(() => GetGlobalState(getIt())); // Use Cases - Contribution getIt.registerLazySingleton(() => GetUserContribution(getIt())); }