getK<T extends Object> method

Option<Resolvable<T>> getK<T extends Object>(
  1. Entity typeEntity, {
  2. Entity groupEntity = const DefaultEntity(),
  3. bool traverse = true,
})
inherited

Retrieves the dependency.

Implementation

Option<Resolvable<T>> getK<T extends Object>(
  Entity typeEntity, {
  Entity groupEntity = const DefaultEntity(),
  bool traverse = true,
}) {
  final g = groupEntity.preferOverDefault(focusGroup);
  final option = getDependencyK<T>(
    typeEntity,
    groupEntity: g,
    traverse: traverse,
  );
  if (option.isNone()) {
    return const None();
  }
  UNSAFE:
  {
    final result = option.unwrap();
    if (result.isErr()) {
      return Some(Sync.err(result.err().unwrap().transfErr()));
    }
    final value = result.unwrap().value;
    if (value.isSync()) {
      return Some(value);
    }
    return Some(
      Async(
        () => value.async().unwrap().value.then((e) {
          final value = e.unwrap();
          registry.removeDependencyK(typeEntity, groupEntity: g).end();
          final metadata = option.unwrap().unwrap().metadata.map(
            (e) => e.copyWith(
              preemptivetypeEntity: TypeEntity(Sync, [typeEntity]),
            ),
          );
          registerDependencyK(
            dependency: Dependency(Sync.okValue(value), metadata: metadata),
            checkExisting: false,
          ).end();
          return value;
        }),
      ),
    );
  }
}