import 'package:benchmark_di/scenarios/universal_binding_mode.dart'; /// Универсальная абстракция для DI-адаптера с унифицированной функцией регистрации. /// Теперь для каждого адаптера задаём строгий generic тип контейнера. typedef Registration = void Function(TContainer); abstract class DIAdapter { /// Устанавливает зависимости с помощью строго типизированного контейнера. void setupDependencies(void Function(TContainer container) registration); /// Возвращает типобезопасную функцию регистрации зависимостей под конкретный сценарий. Registration universalRegistration({ required S scenario, required int chainCount, required int nestingDepth, required UniversalBindingMode bindingMode, }); /// Резолвит (возвращает) экземпляр типа [T] (по имени, если требуется). T resolve({String? named}); /// Асинхронно резолвит экземпляр типа [T] (если нужно). Future resolveAsync({String? named}); /// Уничтожает/отчищает DI-контейнер. void teardown(); /// Открывает дочерний scope и возвращает новый адаптер (если поддерживается). DIAdapter openSubScope(String name); /// Ожидание готовности DI контейнера (если нужно для async DI). Future waitForAsyncReady() async {} }