This issue has shown that, when we introduce new providers and propagate the configs to users, then remove the config ("asf" was removed and renamed to "default"), user configuration breaks
- #6358

One way of dealing with this is checking at startup time whether the configured providers are available, and if not, log a warning and fall back to the default provider.
pass
class ServiceStateException(ServiceException):
    pass
class ServiceLifecycleHook:
    def on_after_init(self):
        pass
    def on_before_start(self):
        pass
    def on_before_stop(self):
        pass
    def on_exception(self):
        pass
class BackendStateLifecycle(abc.ABC):
    """
    Interface that supports the retrieval, injection and restore of the backend for services.
    """
    @abc.abstractmethod
    def retrieve_state(self, **kwargs):
        """Retrieves the backend of a service"""
    @abc.abstractmethod
    def inject_state(self, **kwargs):
        """Injects a backend for a service"""
    @abc.abstractmethod
    def reset_state(self):
        """Resets a backend for a service"""
    @abc.abstractmethod
    def on_after_reset(self):
        """Performed after the reset of a service"""
        pass
class Service: