get<T extends Object> method
Retrieves a registered dependency of type T (and optionally name).
Throws a WeaverException if the dependency is not registered.
Implementation
T get<T extends Object>({final String? name}) {
final dependencyKey = DependencyKey(type: T, name: name);
if (isRegistered<T>(name: name)) {
final dependency = _dependencyMap.find(dependencyKey)! as Dependency<T>;
if (dependency.value == null && dependency.lazyInstantiateCallback != null) {
dependency.value = dependency.lazyInstantiateCallback!();
}
return dependency.value!;
} else {
var message = 'There is no instance of $dependencyKey registered.';
final matchKeyForOnlyType = _dependencyMap.entries.map((final entry) {
final key = entry.key;
final registeredValue = entry.value.value;
if (key.type == T && key.name != null && registeredValue != null) {
return key;
} else {
return null;
}
}).nonNulls;
if (matchKeyForOnlyType.isNotEmpty) {
message = '$message But there are named dependencies registered with this type: $matchKeyForOnlyType. '
'Pass [name] when calling get (e.g. weaver.get<$T>(name: ...)).';
}
throw WeaverException(message);
}
}