get<T extends Object> method
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;
}),
),
);
}
}