isRegistered<T extends Object> method

bool isRegistered<T extends Object>({
  1. Entity groupEntity = const DefaultEntity(),
  2. bool traverse = true,
  3. Set<DI>? visited,
})

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