refactor: full generic DIAdapter workflow & universalRegistration abstraction

- Made UniversalChainBenchmark and UniversalChainAsyncBenchmark fully generic with strong typing for DIAdapter<TContainer>
- Moved all universalRegistration logic inside adapters; removed global function and typedef
- Replaced dynamic/object-based registration with type-safe generic contracts end-to-end
- Updated CLI and usage: all DI and scenarios are invoked via type-safe generics
- Fixed all analysis errors, Riverpod async/future usages, and imports for full Dart 3 compatibility
- All benchmarks fully pass for Cherrypick, GetIt, and Riverpod adapters
This commit is contained in:
Sergey Penkovsky
2025-08-07 14:11:29 +03:00
parent 54446868e4
commit 56bdb3946e
8 changed files with 223 additions and 204 deletions

View File

@@ -2,15 +2,14 @@ import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:benchmark_di/di_adapters/di_adapter.dart';
import 'package:benchmark_di/scenarios/universal_chain_module.dart';
import 'package:benchmark_di/scenarios/universal_service.dart';
import 'package:benchmark_di/scenarios/di_universal_registration.dart';
class UniversalChainBenchmark extends BenchmarkBase {
final DIAdapter _di;
class UniversalChainBenchmark<TContainer> extends BenchmarkBase {
final DIAdapter<TContainer> _di;
final int chainCount;
final int nestingDepth;
final UniversalBindingMode mode;
final UniversalScenario scenario;
DIAdapter? _childDi;
DIAdapter<TContainer>? _childDi;
UniversalChainBenchmark(
this._di, {
@@ -24,25 +23,22 @@ class UniversalChainBenchmark extends BenchmarkBase {
void setup() {
switch (scenario) {
case UniversalScenario.override:
_di.setupDependencies(getUniversalRegistration(
_di,
_di.setupDependencies(_di.universalRegistration(
chainCount: chainCount,
nestingDepth: nestingDepth,
bindingMode: UniversalBindingMode.singletonStrategy,
scenario: UniversalScenario.chain,
));
_childDi = _di.openSubScope('child');
_childDi!.setupDependencies(getUniversalRegistration(
_childDi!,
_childDi!.setupDependencies(_childDi!.universalRegistration(
chainCount: chainCount,
nestingDepth: nestingDepth,
bindingMode: UniversalBindingMode.singletonStrategy,
scenario: UniversalScenario.chain, // критично: цепочку, а не просто alias!
scenario: UniversalScenario.chain,
));
break;
default:
_di.setupDependencies(getUniversalRegistration(
_di,
_di.setupDependencies(_di.universalRegistration(
chainCount: chainCount,
nestingDepth: nestingDepth,
bindingMode: mode,