getOrRegisterAsync<T extends Object> method
Future<T>
getOrRegisterAsync<T extends Object>(
- Future<
T> instanceCreator(), - RegisterAs registerAs
Gets or registers an async dependency with optimized lazy loading.
This method checks if a dependency is already registered and either returns the existing instance or registers a new one based on the specified type.
instanceCreator - Async function that creates the instance
registerAs - Type of registration (factoryAsync, lazySingletonAsync, singletonAsync)
Returns a Future with the dependency instance.
Implementation
Future<T> getOrRegisterAsync<T extends Object>(
Future<T> Function() instanceCreator,
RegisterAs registerAs,
) async {
// Optimized: Check registration once and handle accordingly
if (!isRegistered<T>()) {
switch (registerAs) {
case RegisterAs.factoryAsync:
// Optimized: Direct async function registration
registerFactoryAsync<T>(instanceCreator);
break;
case RegisterAs.lazySingletonAsync:
// Optimized: Direct async lazy singleton registration
registerLazySingletonAsync<T>(instanceCreator);
break;
case RegisterAs.singletonAsync:
// Optimized: Create async instance once and register
final T instance = await instanceCreator();
registerSingleton<T>(instance);
break;
default:
throw UnimplementedError(
'RegisterAs.$registerAs is not implemented for async operations');
}
}
// For singletonAsync, we registered it as a regular singleton, so use get instead of getAsync
if (registerAs == RegisterAs.singletonAsync) {
return get<T>();
}
return getAsync<T>();
}