dispose method
Dispose this scope and all its dependencies
Implementation
@mustCallSuper
void dispose() {
if (_disposed) {
return;
}
ZenLogger.logDebug('Disposing scope: $name');
// Run all registered disposers
for (final disposer in _disposers) {
try {
disposer();
} catch (e) {
ZenLogger.logWarning('Error executing disposer in scope $name: $e');
}
}
// Dispose all controllers AND services
for (final dep in _typeBindings.values) {
if (dep is ZenController && !dep.isDisposed) {
dep.dispose();
}
// 🆕 Add ZenService disposal
else if (dep is ZenService && !dep.isDisposed) {
dep.dispose();
}
}
for (final dep in _taggedBindings.values) {
if (dep is ZenController && !dep.isDisposed) {
dep.dispose();
}
// 🆕 Add ZenService disposal
else if (dep is ZenService && !dep.isDisposed) {
dep.dispose();
}
}
// Dispose child scopes
final childrenToDispose = List.from(_childScopes);
for (final child in childrenToDispose) {
child.dispose();
}
// Clear all collections
_typeBindings.clear();
_taggedBindings.clear();
_typeToTags.clear();
_factories.clear();
_childScopes.clear();
_useCount.clear();
_disposers.clear();
// Remove this scope from parent's children
parent?._childScopes.remove(this);
_disposed = true;
}