get<T extends Object> method

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

Retrieves a dependency from the container. Retrieves a dependency from the container.

Implementation

// Option<Resolvable<T>> get<T extends Object>({
//   Entity groupEntity = const DefaultEntity(),
//   bool traverse = true,
// }) {
//   assert(T != Object, 'T must be specified and cannot be Object.');
//   final g = groupEntity.preferOverDefault(focusGroup);
//   final option = getDependency<T>(groupEntity: g, traverse: traverse);
//   if (option.isNone()) {
//     return const None();
//   }
//   final result = option.unwrap();
//   if (result.isErr()) {
//     return Some(Sync.value(result.err().unwrap().transfErr()));
//   }
//   final dependency = result.unwrap();
//   if (dependency.value.isSync()) {
//     return Some(dependency.value);
//   }
//   return Some(dependency.cacheAsyncValue());
// }

/// Retrieves a dependency from the container.
Option<Resolvable<T>> get<T extends Object>({
  Entity groupEntity = const DefaultEntity(),
  bool traverse = true,
}) {
  assert(T != Object, 'T must be specified and cannot be Object.');
  final g = groupEntity.preferOverDefault(focusGroup);
  final option = getDependency<T>(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 dependency = result.unwrap();
    final value = dependency.value;
    if (value.isSync()) {
      return Some(value);
    }
    return Some(
      Async(
        () => value.async().unwrap().value.then((e) {
          final value = e.unwrap();
          registry.removeDependency<T>(groupEntity: g).unwrap();
          registerDependency<T>(
            dependency: Dependency<T>(
              Sync.okValue(value),
              metadata: option.unwrap().unwrap().metadata,
            ),
            checkExisting: false,
          ).unwrap();
          return value;
        }),
      ),
    );
  }
}