registerProvider method

String registerProvider(
  1. FeatureProvider provider, {
  2. String? providerId,
})

Register a provider under an SDK identifier.

The identifier defaults to provider metadata for backwards compatibility. Callers registering same-name instances must supply distinct identifiers.

Implementation

String registerProvider(FeatureProvider provider, {String? providerId}) {
  final id = providerId ?? provider.metadata.name;
  if (id.isEmpty) {
    throw ArgumentError.value(id, 'providerId', 'must not be empty');
  }
  _lifecycleManager.track(provider);
  final replacedProvider = _providerRegistry[id];
  _providerRegistry[id] = provider;
  _activatePendingBindings(id, provider);
  if (replacedProvider != null && !identical(replacedProvider, provider)) {
    unawaited(
      _lifecycleManager
          .shutdownIfUnused(
            replacedProvider,
            isExternallyInUse: () => _providerRegistry.values.any(
              (registered) => identical(registered, replacedProvider),
            ),
          )
          .catchError((Object error) {
            _logger.severe(
              'Failed to retire replaced provider registration $id: $error',
            );
          }),
    );
  }
  return id;
}