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