registerFactory<T, R extends T> static method
Registers a factory that creates a new instance on each resolution.
Factories are useful for stateless services or when you need a fresh instance each time (e.g., request handlers, temporary workers).
Type Parameters:
T: The interface or base type to registerR: The concrete implementation (must extend or implementT)
Parameters:
locator: Factory function that creates instances. Usegetparameter to resolve dependencies.name: Optional name qualifier for named instances
Example:
// Simple factory
Spot.registerFactory<IRepository, Repository>(
(get) => Repository(),
);
// Named factory
Spot.registerFactory<HttpClient, PublicHttpClient>(
(get) => PublicHttpClient(),
name: 'public',
);
// Factory with dependencies
Spot.registerFactory<IApiClient, ApiClient>(
(get) => ApiClient(
dio: get<Dio>(),
settings: get<ISettings>(),
),
);
See also:
- registerSingle for singleton registration
- registerAsync for async singleton registration
Implementation
static void registerFactory<T, R extends T>(SpotGetter<R> locator, {String? name}) {
final key = SpotKey<T>(T, name);
if (registry.containsKey(key) && logging) {
log.w('Overriding factory: $key with $R');
}
registry[key] = SpotService<T>(SpotType.factory, locator as SpotGetter<T>, R);
if (logging) log.v('Registered factory $key -> $R');
}