singleton<T> method
void
singleton<T>({
- String? name,
- required T factory(
- ServiceContainer container, [
- Map<
String, dynamic> ? options
- bool eager = false,
override
Registers a singleton with optional eager loading.
See ServiceContainer.singleton for details.
Implementation
@override
void singleton<T>({
String? name,
required T Function(
ServiceContainer container, [
Map<String, dynamic>? options,
])
factory,
bool eager = false,
}) {
final key = _key<T>(name);
if (_factories.containsKey(key) || _singletons.containsKey(key)) {
throw ServiceContainerException.duplicateRegistration(
type: T,
name: name,
);
}
if (eager) {
_eagerRegistrations[key] = true;
_factories[key] = (container, [options]) => factory(container, options);
} else {
_factories[key] = (container, [options]) =>
_singletons.putIfAbsent(
key,
() => factory(container, options) as Object,
)
as T;
}
}