refactor: unify DIAdapter with generics, ensure type-safety & scalability in benchmark_di

- Refactor DIAdapter to generic abstract class; align interfaces for Cherrypick, GetIt, Riverpod.
- Remove all dynamic/object usage from dependency registration and bench scenarios.
- Universal getUniversalRegistration function now fully type-safe for all DIs.
- Fix teardown and lifecycle for RiverpodAdapter to prevent disposed Container errors.
- Update CLI and benchmark entry points; validated all scenarios and stress modes for each DI adapter.
This commit is contained in:
Sergey Penkovsky
2025-08-07 13:44:39 +03:00
parent 590b876cf4
commit 54446868e4
7 changed files with 193 additions and 192 deletions

View File

@@ -1,24 +1,21 @@
/// Абстракция для DI-адаптера с использованием функций регистрации.
///
/// Позволяет использовать любые DI-контейнеры: и модульные, и безмодульные.
abstract class DIAdapter {
/// Устанавливает зависимости с помощью одной функции регистрации.
///
/// Функция принимает выбранный DI-контейнер, задаваемый реализацией.
void setupDependencies(void Function(dynamic container) registration);
/// Универсальная абстракция для DI-адаптера с унифицированной функцией регистрации.
/// Теперь для каждого адаптера задаём строгий generic тип контейнера.
abstract class DIAdapter<TContainer> {
/// Устанавливает зависимости с помощью строго типизированного контейнера.
void setupDependencies(void Function(TContainer container) registration);
/// Резолвит (возвращает) экземпляр типа [T] (по имени, если требуется).
T resolve<T extends Object>({String? named});
/// Асинхронно резолвит экземпляр типа [T].
/// Асинхронно резолвит экземпляр типа [T] (если нужно).
Future<T> resolveAsync<T extends Object>({String? named});
/// Уничтожает/отчищает DI-контейнер.
void teardown();
/// Открывает дочерний под-scope (если применимо).
DIAdapter openSubScope(String name);
/// Открывает дочерний scope и возвращает новый адаптер (если поддерживается).
DIAdapter<TContainer> openSubScope(String name);
/// Ожидание готовности DI контейнера (нужно для async DI, например get_it)
Future<void> waitForAsyncReady();
/// Ожидание готовности DI контейнера (если нужно для async DI).
Future<void> waitForAsyncReady() async {}
}