import 'package:rasadyar_chicken/data/common/dio_error_handler.dart'; import 'package:rasadyar_chicken/features/common/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/features/common/data/di/common_di.dart'; import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/kill_house/kill_house_remote_impl.dart'; import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository.dart'; import 'package:rasadyar_chicken/data/repositories/kill_house/kill_house_repository_impl.dart'; import 'package:rasadyar_chicken/features/poultry_science/data/di/poultry_science_di.dart'; import 'package:rasadyar_chicken/features/steward/data/di/steward_di.dart'; import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.asNewInstance(); Future setupChickenDI() async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); tokenService.getBaseUrl(Module.chicken); diChicken.registerLazySingleton( () => AppInterceptor( // سامانه مرغ فعلاً رفرش توکن ندارد refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { await tokenService.saveAccessToken(Module.chicken, newToken); }, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); var baseUrl = tokenService.baseurl.value; diChicken.registerLazySingleton( () => DioRemote( baseUrl: baseUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); // Setup common feature DI await setupCommonDI(diChicken, dioRemote); // Setup poultry_science feature DI await setupPoultryScienceDI(diChicken, dioRemote); // Setup steward feature DI await setupStewardDI(diChicken, dioRemote); //region kill house module DI diChicken.registerLazySingleton( () => KillHouseRemoteDataSourceImpl(diChicken.get()), ); diChicken.registerLazySingleton( () => KillHouseRepositoryImpl(diChicken.get()), ); //endregion } Future newSetupAuthDI(String newUrl) async { var tokenService = Get.find(); await tokenService.saveBaseUrl(Module.chicken, newUrl); // پاک‌سازی DI مخصوص ماژول مرغ await diChicken.resetScope(); diChicken.pushNewScope(); // --- Re-register AppInterceptor diChicken.registerLazySingleton( () => AppInterceptor( refreshTokenCallback: () async => null, saveTokenCallback: (newToken) async {}, clearTokenCallback: () async { await tokenService.deleteModuleTokens(Module.chicken); Get.offAllNamed(CommonRoutes.auth, arguments: Module.chicken); }, ), instanceName: 'chickenInterceptor', ); // --- Re-register DioRemote diChicken.registerLazySingleton( () => DioRemote( baseUrl: newUrl, interceptors: diChicken.get( instanceName: 'chickenInterceptor', ), ), ); final dioRemote = diChicken.get(); await dioRemote.init(); // --- common, poultry_science, steward await setupCommonDI(diChicken, dioRemote); await setupPoultryScienceDI(diChicken, dioRemote); await setupStewardDI(diChicken, dioRemote); } Future reRegister(T Function() factory) async { if (diChicken.isRegistered()) { await diChicken.unregister(); } diChicken.registerLazySingleton(factory); } Future removeChickenDI() async { await diChicken.resetScope(); }