unregister<T extends Object> method
Resolvable<Option<T> >
unregister<T extends Object>({
- Entity groupEntity = const DefaultEntity(),
- bool traverse = true,
- bool removeAll = true,
- bool triggerOnUnregisterCallbacks = true,
inherited
Unregisters a dependency.
Implementation
Resolvable<Option<T>> unregister<T extends Object>({
Entity groupEntity = const DefaultEntity(),
bool traverse = true,
bool removeAll = true,
bool triggerOnUnregisterCallbacks = true,
}) {
assert(T != Object, 'T must be specified and cannot be Object.');
final g = groupEntity.preferOverDefault(focusGroup);
for (final di in [this as DI, ...parents]) {
final dependencyOption = di.removeDependency<T>(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<T>().unwrap(),
);
});
}).flatten();
}
}
}
if (!removeAll) {
break;
}
}
return Sync.okValue(None<T>());
}