get<T extends Object> method

T get<T extends Object>()

👐 Get an instance of the service by type

Implementation

T get<T extends Object>() {
  final serviceDefinition = serviceDefinitionsByType[T];

  if (serviceDefinition == null) {
    throw ServiceNotFoundException<T>(
      'Service $T not found',
    );
  }

  if (serviceDefinition.isSingleton || isScoped) {
    final singletonValue = singletons[T];

    if (singletonValue != null) {
      return singletonValue as T;
    }
  }

  final service = serviceDefinition.factory(this) as T;

  if (serviceDefinition.isSingleton || isScoped) {
    singletons[T] = service;
  }

  return service;
}