Изучение
Scope и override
Local-first разрешение в дочернем Scope и явное переопределение родительских регистраций.
v0.1.0-dev.1Средний уровеньark_di
Scope и override
Дочерний контейнер сначала проверяет собственные регистрации, а затем обращается к родителю. Закрытие дочернего Scope не закрывает родительский.
dart
final preview = application.createChild((binder) {
binder.bindInstance<CatalogRepository>(
MemoryCatalogRepository(items),
overrideParent: true,
);
binder.bindLazySingleton<CatalogService>(
(resolver) => CatalogService(resolver.get<CatalogRepository>()),
overrideParent: true,
);
});
Override должен соответствовать существующей регистрации родителя. Если родительский Singleton уже получил родительский Repository, переопределение только Repository не пересоберёт consumer — его также надо переопределить в дочернем Scope.
DiKey<T>.named подходит для нескольких семантически разных конфигураций одного Dart-типа.