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;
  }
}