isRegistered<T extends Object> method
Returns whether a dependency keyed under exact type T is registered in
groupEntity. Strict: a Lazy<T> registration does NOT count here —
callers wanting that must check isRegistered<Lazy<T>>(). Mirrors the
keying contract of the registry's insert/remove.
Implementation
bool isRegistered<T extends Object>({
Entity groupEntity = const DefaultEntity(),
bool traverse = true,
Set<DI>? visited,
}) {
assert(T != Object, 'T must be specified and cannot be Object.');
// Cycle guard: a misconfigured hierarchy (`a.parents.add(b)` and
// `b.parents.add(a)`) would otherwise stack-overflow. The `visited`
// parameter is internal — public callers should leave it null.
final v = visited ?? <DI>{};
if (!v.add(this as DI)) return false;
final g = groupEntity.preferOverDefault(focusGroup);
if (registry.containsDependency<T>(groupEntity: g)) {
return true;
}
if (traverse) {
for (final parent in parents) {
if (parent.isRegistered<T>(
groupEntity: g,
traverse: true,
visited: v,
)) {
return true;
}
}
}
return false;
}