reset method
Disposes all dependencies registered in this scope.
Dependencies marked as permanent are preserved unless force is true.
Implementation
Future<void> reset({bool force = false}) async {
_ensureUsable();
final entriesToRemove = <MapEntry<LevitScopeKey, LevitDependency>>[];
for (final entry in _registry.entries.toList(growable: false)) {
final info = entry.value;
if (info.permanent && !force) continue;
_notifyDelete(entry.key.debugString, info, 'reset');
entriesToRemove.add(entry);
}
for (final entry in entriesToRemove) {
_removeCanonicalBinding(entry.key);
}
if (force) {
// Force reset also drops all lookup caches.
_typeRegistry.clear();
_typeResolutionCache.clear();
_instanceCache.clear();
_resolutionCache.clear();
}
await _disposeAll(
entriesToRemove
.where((entry) => entry.value.isInstantiated)
.map((entry) => entry.value.instance)
.toList(growable: false)
.reversed,
);
}