def register(
    provider_registry,
    iut_provider=None,
    log_area_provider=None,
    execution_space_provider=None,
):
    """Register one or many providers.

    :param provider_registry: The provider registry to store providers in.
    :type provider_registry: :obj:`environment_provider.lib.registry.ProviderRegistry`
    :param iut_provider: An IUT provider to register.
    :type iut_provider: dict or None
    :param log_area_provider: A log area provider to register.
    :type log_area_provider: dict or None
    :param execution_space_provider: An execution space provider to register.
    :type execution_space_provider: dict or None
    :return: The result of the registering.
    :rtype: bool
    """
    if not any([iut_provider, log_area_provider, execution_space_provider]):
        # At least one provider must be supplied.
        return False
    if iut_provider is not None:
        provider_registry.register_iut_provider(iut_provider)
    if log_area_provider is not None:
        provider_registry.register_log_area_provider(log_area_provider)
    if execution_space_provider is not None:
        provider_registry.register_execution_space_provider(execution_space_provider)
    return True