singleton<T> method

  1. @override
void singleton<T>({
  1. String? name,
  2. required T factory(
    1. ServiceContainer container, [
    2. Map<String, dynamic>? options
    ]),
  3. 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;
  }
}