get<T> method
- [String instanceName]
retrieves or creates an instance of a registered type T
depending on the registration function used for this type or based on a name.
Implementation
T get<T>([String instanceName]) {
throwIf(
(!(const Object() is! T) && instanceName == null),
ArgumentError(
'GetIt: You have to provide either a type or a name. Did you accidentally do `var sl=GetIt.instance();` instead of var sl=GetIt.instance;'),
);
_ServiceFactory<T> object;
if (instanceName == null) {
object = _factories[T];
} else {
final registeredObject = _factoriesByName[instanceName];
if (registeredObject != null) {
if (registeredObject.instance != null &&
registeredObject.instance is! T) {
print(T.toString());
throw ArgumentError(
"Object with name $instanceName has a different type (${registeredObject.registrationType.toString()}) than the one that is inferred (${T.toString()}) where you call it");
}
}
object = registeredObject;
}
if (object == null && instanceName == null) {
throw ArgumentError.value(T,
"Object of type ${T.toString()} is not registered inside GetIt.\n Did you forget to pass an instance name? \n(Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance;)");
}
if (object == null && instanceName != null) {
throw ArgumentError.value(instanceName,
"Object with name $instanceName is not registered inside GetIt");
}
return object.getObject();
}