getOrRegister<T extends Object> method
Gets or registers a 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 - Function that creates the instance
registerAs - Type of registration (factory, singleton, lazySingleton, etc.)
Returns the dependency instance.
Implementation
T getOrRegister<T extends Object>(
T Function() instanceCreator,
RegisterAs registerAs,
) {
// Optimized: Check registration once and handle accordingly
if (!isRegistered<T>()) {
switch (registerAs) {
case RegisterAs.singleton:
// Optimized: Create instance once and register
registerSingleton<T>(instanceCreator());
break;
case RegisterAs.factory:
// Optimized: Direct function registration without extra wrapping
registerFactory<T>(instanceCreator);
break;
case RegisterAs.lazySingleton:
// Optimized: Direct function registration without extra wrapping
registerLazySingleton<T>(instanceCreator);
break;
default:
throw UnimplementedError('RegisterAs.$registerAs is not implemented');
}
}
return get<T>();
}