mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-24 21:57:58 +00:00
fix: universal benchmarks and DI registration; proper named binding; robust override support for cherrypick and get_it; improved CLI args
This commit is contained in:
@@ -12,11 +12,11 @@ class CherrypickDIAdapter implements DIAdapter {
|
||||
}
|
||||
|
||||
@override
|
||||
T resolve<T>({String? named}) =>
|
||||
T resolve<T extends Object>({String? named}) =>
|
||||
named == null ? _scope!.resolve<T>() : _scope!.resolve<T>(named: named);
|
||||
|
||||
@override
|
||||
Future<T> resolveAsync<T>({String? named}) async =>
|
||||
Future<T> resolveAsync<T extends Object>({String? named}) async =>
|
||||
named == null ? await _scope!.resolveAsync<T>() : await _scope!.resolveAsync<T>(named: named);
|
||||
|
||||
@override
|
||||
@@ -30,6 +30,9 @@ class CherrypickDIAdapter implements DIAdapter {
|
||||
final sub = _scope!.openSubScope(name);
|
||||
return _CherrypickSubScopeAdapter(sub);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> waitForAsyncReady() async {}
|
||||
}
|
||||
|
||||
/// Internal adapter for a CherryPick sub-scope (callbacks based).
|
||||
@@ -43,11 +46,11 @@ class _CherrypickSubScopeAdapter extends CherrypickDIAdapter {
|
||||
}
|
||||
|
||||
@override
|
||||
T resolve<T>({String? named}) =>
|
||||
T resolve<T extends Object>({String? named}) =>
|
||||
named == null ? _subScope.resolve<T>() : _subScope.resolve<T>(named: named);
|
||||
|
||||
@override
|
||||
Future<T> resolveAsync<T>({String? named}) async =>
|
||||
Future<T> resolveAsync<T extends Object>({String? named}) async =>
|
||||
named == null ? await _subScope.resolveAsync<T>() : await _subScope.resolveAsync<T>(named: named);
|
||||
|
||||
@override
|
||||
|
||||
@@ -8,14 +8,17 @@ abstract class DIAdapter {
|
||||
void setupDependencies(void Function(dynamic container) registration);
|
||||
|
||||
/// Резолвит (возвращает) экземпляр типа [T] (по имени, если требуется).
|
||||
T resolve<T>({String? named});
|
||||
T resolve<T extends Object>({String? named});
|
||||
|
||||
/// Асинхронно резолвит экземпляр типа [T].
|
||||
Future<T> resolveAsync<T>({String? named});
|
||||
Future<T> resolveAsync<T extends Object>({String? named});
|
||||
|
||||
/// Уничтожает/отчищает DI-контейнер.
|
||||
void teardown();
|
||||
|
||||
/// Открывает дочерний под-scope (если применимо).
|
||||
DIAdapter openSubScope(String name);
|
||||
|
||||
/// Ожидание готовности DI контейнера (нужно для async DI, например get_it)
|
||||
Future<void> waitForAsyncReady();
|
||||
}
|
||||
|
||||
32
benchmark_cherrypick/lib/di_adapters/get_it_adapter.dart
Normal file
32
benchmark_cherrypick/lib/di_adapters/get_it_adapter.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'di_adapter.dart';
|
||||
|
||||
class GetItAdapter implements DIAdapter {
|
||||
late GetIt _getIt;
|
||||
|
||||
@override
|
||||
void setupDependencies(void Function(dynamic container) registration) {
|
||||
_getIt = GetIt.asNewInstance();
|
||||
registration(_getIt);
|
||||
}
|
||||
|
||||
@override
|
||||
T resolve<T extends Object>({String? named}) => _getIt<T>(instanceName: named);
|
||||
|
||||
@override
|
||||
Future<T> resolveAsync<T extends Object>({String? named}) async => _getIt<T>(instanceName: named);
|
||||
|
||||
@override
|
||||
void teardown() => _getIt.reset();
|
||||
|
||||
@override
|
||||
DIAdapter openSubScope(String name) {
|
||||
// get_it не поддерживает scope, возвращаем новый инстанс
|
||||
return GetItAdapter();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> waitForAsyncReady() async {
|
||||
await _getIt.allReady();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user