2025-01-21 14:24:31 +03:00
|
|
|
|
import 'package:friflex_starter/app/app_config/app_config.dart';
|
|
|
|
|
|
import 'package:friflex_starter/app/app_config/i_app_config.dart';
|
|
|
|
|
|
import 'package:friflex_starter/app/app_env.dart';
|
|
|
|
|
|
import 'package:friflex_starter/app/http/app_http_client.dart';
|
|
|
|
|
|
import 'package:friflex_starter/app/http/i_http_client.dart';
|
|
|
|
|
|
import 'package:friflex_starter/di/di_repositories.dart';
|
2025-02-12 10:53:38 +03:00
|
|
|
|
import 'package:friflex_starter/di/di_services.dart';
|
2025-01-21 14:24:31 +03:00
|
|
|
|
import 'package:friflex_starter/di/di_typedefs.dart';
|
|
|
|
|
|
import 'package:friflex_starter/features/debug/i_debug_service.dart';
|
|
|
|
|
|
|
|
|
|
|
|
/// {@template dependencies_container}
|
|
|
|
|
|
/// Контейнер для зависимостей
|
2025-04-27 17:08:34 +03:00
|
|
|
|
/// [env] - окружение приложения
|
|
|
|
|
|
/// [debugService] - сервис для отладки
|
2025-01-21 14:24:31 +03:00
|
|
|
|
/// {@endtemplate}
|
|
|
|
|
|
final class DiContainer {
|
|
|
|
|
|
/// {@macro dependencies_container}
|
2025-02-06 09:30:08 +03:00
|
|
|
|
DiContainer({required this.env, required IDebugService dService})
|
2025-05-28 16:38:56 +03:00
|
|
|
|
: debugService = dService;
|
2025-01-21 14:24:31 +03:00
|
|
|
|
final AppEnv env;
|
|
|
|
|
|
|
|
|
|
|
|
/// Сервис для отладки, получаем из конструктора
|
|
|
|
|
|
late final IDebugService debugService;
|
|
|
|
|
|
|
|
|
|
|
|
/// Конфигурация приложения
|
|
|
|
|
|
late final IAppConfig appConfig;
|
|
|
|
|
|
|
|
|
|
|
|
/// Сервис для работы с HTTP запросами
|
2025-02-12 10:53:38 +03:00
|
|
|
|
late final IHttpClient Function(IDebugService, IAppConfig) httpClientFactory;
|
2025-01-21 14:24:31 +03:00
|
|
|
|
|
2025-02-12 10:53:38 +03:00
|
|
|
|
/// Репозитории приложения
|
2025-01-21 14:24:31 +03:00
|
|
|
|
late final DiRepositories repositories;
|
|
|
|
|
|
|
2025-02-12 10:53:38 +03:00
|
|
|
|
/// Сервисы приложения
|
|
|
|
|
|
late final DiServices services;
|
|
|
|
|
|
|
2025-01-21 14:24:31 +03:00
|
|
|
|
/// Метод для инициализации зависимостей
|
|
|
|
|
|
Future<void> init({
|
|
|
|
|
|
required OnProgress onProgress,
|
|
|
|
|
|
required OnComplete onComplete,
|
|
|
|
|
|
required OnError onError,
|
|
|
|
|
|
}) async {
|
2025-02-12 10:53:38 +03:00
|
|
|
|
// Инициализация конфигурации приложения
|
2025-01-21 14:24:31 +03:00
|
|
|
|
appConfig = switch (env) {
|
|
|
|
|
|
AppEnv.dev => AppConfigDev(),
|
|
|
|
|
|
AppEnv.prod => AppConfigProd(),
|
2025-05-28 16:38:56 +03:00
|
|
|
|
AppEnv.stage => AppConfigStage(),
|
2025-01-21 14:24:31 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
2025-02-12 10:53:38 +03:00
|
|
|
|
// Инициализация HTTP клиента
|
2025-05-28 16:38:56 +03:00
|
|
|
|
httpClientFactory = (debugService, appConfig) =>
|
|
|
|
|
|
AppHttpClient(debugService: debugService, appConfig: appConfig);
|
2025-01-21 14:24:31 +03:00
|
|
|
|
|
2025-02-12 10:53:38 +03:00
|
|
|
|
// Инициализация сервисов
|
|
|
|
|
|
services = DiServices()
|
2025-05-28 16:38:56 +03:00
|
|
|
|
..init(onProgress: onProgress, onError: onError, diContainer: this);
|
2025-02-12 10:53:38 +03:00
|
|
|
|
// throw Exception('Тестовая - ошибка инициализации зависимостей');
|
|
|
|
|
|
// Инициализация репозиториев
|
|
|
|
|
|
repositories = DiRepositories()
|
2025-05-28 16:38:56 +03:00
|
|
|
|
..init(onProgress: onProgress, onError: onError, diContainer: this);
|
2025-02-12 10:53:38 +03:00
|
|
|
|
|
|
|
|
|
|
onComplete('Инициализация зависимостей завершена!');
|
2025-01-21 14:24:31 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|