mnemo_cards/lib/di/injector.dart
2024-08-18 20:02:36 +03:00

161 lines
4.6 KiB
Dart

import 'package:app_links/app_links.dart';
import 'package:get_it/get_it.dart';
import 'package:mnemo_cards/features/packs/pack_cache_manager.dart';
import 'package:mnemo_cards/features/packs/packs_api.dart';
import 'package:mnemo_cards/features/purchase/google_purchase_handler.dart';
import 'package:mnemo_cards/features/purchase/yookassa_purchase_handler.dart';
import 'package:mnemo_cards/features/subscription/subscription_api.dart';
import 'package:mnemo_cards/managers/favorite_cards.dart';
import 'package:mnemo_cards/managers/repository/dio_provider.dart';
import 'package:mnemo_cards/managers/repository/http_repository.dart';
import 'package:mnemo_cards/managers/user_state_holder.dart';
import '../features/deeplinks/deeplinks_manager_impl.dart';
import '../features/packs/images_holder.dart';
import '../features/packs/loading_packs_holder.dart';
import '../features/packs/pack_updater.dart';
import '../features/packs/preview_packs_poller.dart';
import '../features/purchase/in_app_purchase.dart';
import '../features/purchase/purchase_deeplink_handler.dart';
import '../features/purchase/purchase_manager.dart';
import '../features/subscription/subscription_deeplink_handler.dart';
import '../features/subscription/subscription_manager.dart';
import '../features/tests/test_manager.dart';
import '../features/packs/pack_holder.dart';
import '../features/packs/pack_manager.dart';
import '../features/packs/preview_pack_holder.dart';
import '../managers/user_manager.dart';
GetIt getIt = GetIt.I;
Future<void> setInjections() async {
final _dio = await DioProvider().init();
getIt.registerSingleton<DioProvider>(_dio);
print('set dio');
getIt.registerLazySingleton<HttpRepository>(
() => HttpRepository(getIt.get<DioProvider>().dio),
);
print('set repo');
getIt.registerLazySingleton<PacksApi>(
() => PacksApi(getIt.get<DioProvider>().dio),
);
print('set pack');
getIt.registerLazySingleton<SubscriptionApi>(
() => SubscriptionApi(getIt.get<DioProvider>().dio),
);
getIt.registerLazySingleton<SubscriptionManager>(
() => SubscriptionManager(
getIt.get<UserManager>(),
getIt.get<SubscriptionApi>(),
),
);
print('set subscription');
getIt.registerLazySingleton<PackHolder>(
() => PackHolder(),
);
print('set pack holder');
getIt.registerLazySingleton<LoadingPacksHolder>(
() => LoadingPacksHolder(),
);
print('set loading pack holder');
getIt.registerLazySingleton<PreviewPackHolder>(
() => PreviewPackHolder(),
);
print('set preview');
getIt.registerLazySingleton<PackCacheManager>(
() => PackCacheManager(),
);
print('set cache');
getIt.registerLazySingleton<ImagesHolder>(
() => ImagesHolder(),
);
print('set images holder');
getIt.registerLazySingleton<PreviewPacksPoller>(
() => PreviewPacksPoller(
getIt.get<PacksApi>(),
getIt.get<PreviewPackHolder>(),
),
);
print('set preview poller');
getIt.registerLazySingleton<PackManager>(
() => PackManager(
getIt.get<HttpRepository>(),
getIt.get<PacksApi>(),
getIt.get<PackHolder>(),
getIt.get<PreviewPackHolder>(),
getIt.get<LoadingPacksHolder>(),
getIt.get<PackCacheManager>(),
),
);
print('set pack manager');
getIt.registerLazySingleton<PackUpdater>(
() => PackUpdater(
getIt.get<PacksApi>(),
getIt.get<PackCacheManager>(),
getIt.get<PackHolder>(),
getIt.get<PreviewPackHolder>(),
getIt.get<LoadingPacksHolder>(),
getIt.get<PreviewPacksPoller>(),
),
);
print('set pack updater');
getIt.registerLazySingleton<UserManager>(
() => UserManager(
getIt.get<HttpRepository>(),
),
);
print('set user manager');
getIt.registerLazySingleton<FavoriteCardsController>(
() => FavoriteCardsController(),
);
print('set fav cards container');
getIt.registerLazySingleton<TestManager>(
() =>
TestManager(getIt.get<PackCacheManager>(), getIt.get<HttpRepository>()),
);
print('set test manager');
getIt.registerLazySingleton<InAppPurchaseService>(
() => InAppPurchaseService(),
);
getIt.registerLazySingleton(
() => PurchaseDetailsStreamSubscription(),
);
getIt.registerLazySingleton(
() => PurchaseManager(
GooglePurchaseHandler(getIt.get<HttpRepository>()),
YookassaPurchaseHandler(getIt.get<HttpRepository>()),
),
);
getIt.registerLazySingleton(
() => DeeplinkManager(AppLinks(), [
PurchaseDeeplinkHandler(getIt.get<PurchaseManager>()),
SubscriptionDeeplinkHandler(),
]),
);
try {
await getIt.allReady();
print('injector all ready');
} catch (e, s) {
print('injector error $e $s');
}
}