mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-23 21:13:35 +00:00
feat: full di benchmarks report (en/ru) + get_it scope+override support fix; fresh results for all scenarios and settings
This commit is contained in:
@@ -21,8 +21,52 @@ class GetItAdapter implements DIAdapter {
|
||||
|
||||
@override
|
||||
DIAdapter openSubScope(String name) {
|
||||
// get_it не поддерживает scope, возвращаем новый инстанс
|
||||
return GetItAdapter();
|
||||
// Открываем новый scope и возвращаем адаптер, который в setupDependencies будет использовать init.
|
||||
return _GetItScopeAdapter(_getIt, name);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> waitForAsyncReady() async {
|
||||
await _getIt.allReady();
|
||||
}
|
||||
}
|
||||
|
||||
class _GetItScopeAdapter implements DIAdapter {
|
||||
final GetIt _getIt;
|
||||
final String _scopeName;
|
||||
bool _scopePushed = false;
|
||||
void Function(dynamic container)? _pendingRegistration;
|
||||
|
||||
_GetItScopeAdapter(this._getIt, this._scopeName);
|
||||
|
||||
@override
|
||||
void setupDependencies(void Function(dynamic container) registration) {
|
||||
_pendingRegistration = registration;
|
||||
// Создаём scope через pushNewScope с init для правильной регистрации
|
||||
_getIt.pushNewScope(
|
||||
scopeName: _scopeName,
|
||||
init: (getIt) => _pendingRegistration?.call(getIt),
|
||||
);
|
||||
_scopePushed = true;
|
||||
}
|
||||
|
||||
@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() {
|
||||
if (_scopePushed) {
|
||||
_getIt.popScope();
|
||||
_scopePushed = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
DIAdapter openSubScope(String name) {
|
||||
return _GetItScopeAdapter(_getIt, name);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -28,7 +28,7 @@ void Function(dynamic) getUniversalRegistration(
|
||||
),
|
||||
]);
|
||||
};
|
||||
} else if (adapter is GetItAdapter) {
|
||||
} else if (adapter is GetItAdapter || adapter.runtimeType.toString().contains('GetItScopeAdapter')) {
|
||||
return (getIt) {
|
||||
switch (scenario) {
|
||||
case UniversalScenario.asyncChain:
|
||||
@@ -103,6 +103,13 @@ void Function(dynamic) getUniversalRegistration(
|
||||
// handled at benchmark level
|
||||
break;
|
||||
}
|
||||
// UniversalService alias (без имени) для chain/override-сценариев
|
||||
if (scenario == UniversalScenario.chain || scenario == UniversalScenario.override) {
|
||||
final depName = '${chainCount}_$nestingDepth';
|
||||
getIt.registerSingleton<UniversalService>(
|
||||
getIt<UniversalService>(instanceName: depName),
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
throw UnsupportedError('Unknown DIAdapter type: ${adapter.runtimeType}');
|
||||
|
||||
Reference in New Issue
Block a user