unregisterK method

Resolvable<Option<Object>> unregisterK(
  1. Entity typeEntity, {
  2. Entity groupEntity = const DefaultEntity(),
  3. bool traverse = true,
  4. bool removeAll = true,
  5. bool triggerOnUnregisterCallbacks = true,
})
inherited

Unregisters a dependency.

Implementation

Resolvable<Option> unregisterK(
  Entity typeEntity, {
  Entity groupEntity = const DefaultEntity(),
  bool traverse = true,
  bool removeAll = true,
  bool triggerOnUnregisterCallbacks = true,
}) {
  final g = groupEntity.preferOverDefault(focusGroup);
  for (final di in [this as DI, ...parents]) {
    final dependencyOption = di.removeDependencyK(typeEntity, groupEntity: g);
    if (dependencyOption.isNone()) {
      continue;
    }
    UNSAFE:
    if (triggerOnUnregisterCallbacks) {
      final dependency = dependencyOption.unwrap();
      final metadataOption = dependency.metadata;
      if (metadataOption.isSome()) {
        final metadata = metadataOption.unwrap();
        final onUnregisterOption = metadata.onUnregister;
        if (onUnregisterOption.isSome()) {
          final onUnregister = onUnregisterOption.unwrap();
          return dependency.value.map((e) {
            return Resolvable(() {
              return consec(
                onUnregister(Ok(e)),
                (_) => Some(e).transf().unwrap(),
              );
            });
          }).flatten();
        }
      }
    }
    if (!removeAll) {
      break;
    }
  }
  return syncNone();
}