reset method

Future<void> reset({
  1. bool force = false,
})

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,
  );
}