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:
Sergey Penkovsky
2025-08-07 12:11:16 +03:00
parent 6b6564f8c3
commit f7a7ea4384
4 changed files with 212 additions and 3 deletions

View File

@@ -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

View File

@@ -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}');