2025-08-07 14:18:16 +03:00
|
|
|
|
import 'package:benchmark_di/scenarios/universal_binding_mode.dart';
|
2025-08-13 15:38:44 +03:00
|
|
|
|
|
2025-08-07 13:44:39 +03:00
|
|
|
|
/// Универсальная абстракция для DI-адаптера с унифицированной функцией регистрации.
|
|
|
|
|
|
/// Теперь для каждого адаптера задаём строгий generic тип контейнера.
|
2025-08-07 14:11:29 +03:00
|
|
|
|
typedef Registration<TContainer> = void Function(TContainer);
|
|
|
|
|
|
|
2025-08-07 13:44:39 +03:00
|
|
|
|
abstract class DIAdapter<TContainer> {
|
|
|
|
|
|
/// Устанавливает зависимости с помощью строго типизированного контейнера.
|
|
|
|
|
|
void setupDependencies(void Function(TContainer container) registration);
|
2025-08-06 23:15:28 +03:00
|
|
|
|
|
2025-08-07 14:11:29 +03:00
|
|
|
|
/// Возвращает типобезопасную функцию регистрации зависимостей под конкретный сценарий.
|
|
|
|
|
|
Registration<TContainer> universalRegistration<S extends Enum>({
|
|
|
|
|
|
required S scenario,
|
|
|
|
|
|
required int chainCount,
|
|
|
|
|
|
required int nestingDepth,
|
|
|
|
|
|
required UniversalBindingMode bindingMode,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2025-08-07 08:28:23 +03:00
|
|
|
|
/// Резолвит (возвращает) экземпляр типа [T] (по имени, если требуется).
|
2025-08-07 09:15:26 +03:00
|
|
|
|
T resolve<T extends Object>({String? named});
|
2025-08-06 23:15:28 +03:00
|
|
|
|
|
2025-08-07 13:44:39 +03:00
|
|
|
|
/// Асинхронно резолвит экземпляр типа [T] (если нужно).
|
2025-08-07 09:15:26 +03:00
|
|
|
|
Future<T> resolveAsync<T extends Object>({String? named});
|
2025-08-06 23:15:28 +03:00
|
|
|
|
|
2025-08-07 08:28:23 +03:00
|
|
|
|
/// Уничтожает/отчищает DI-контейнер.
|
2025-08-06 16:21:31 +03:00
|
|
|
|
void teardown();
|
2025-08-06 23:15:28 +03:00
|
|
|
|
|
2025-08-07 13:44:39 +03:00
|
|
|
|
/// Открывает дочерний scope и возвращает новый адаптер (если поддерживается).
|
|
|
|
|
|
DIAdapter<TContainer> openSubScope(String name);
|
2025-08-07 09:15:26 +03:00
|
|
|
|
|
2025-08-07 13:44:39 +03:00
|
|
|
|
/// Ожидание готовности DI контейнера (если нужно для async DI).
|
|
|
|
|
|
Future<void> waitForAsyncReady() async {}
|
2025-08-06 16:21:31 +03:00
|
|
|
|
}
|