public async Task RegisterAsync(ServiceDiscoveryOptions serviceDiscoveryOptions)
        {
            ValidateOptions(serviceDiscoveryOptions);

            var agentServiceRegistration     = CreateAgentServiceRegistration(serviceDiscoveryOptions.ServiceOptions);
            var registerServiceEventArgument = new RegisterServiceEventArgument
            {
                AgentServiceRegistration = agentServiceRegistration,
                ServerOptions            = serviceDiscoveryOptions.ServerOptions
            };

            await RegisterService(registerServiceEventArgument);
        }
        private async Task RegisterService(RegisterServiceEventArgument argument)
        {
            try
            {
                _logger?.LogInformation("Registering service in service discovery application...");

                using (var client = new ConsulClient((configuration) => {
                    configuration.Address = new Uri(argument.ServerOptions.Address);
                }))
                {
                    bool isAlreadyRegistered = await IsServiceAlreadyRegisteredAsync(client, argument.AgentServiceRegistration.ID);

                    if (!isAlreadyRegistered)
                    {
                        _logger?.LogInformation($"Sending information about service to service discovery application [address: {argument.AgentServiceRegistration.Address}, port: {argument.AgentServiceRegistration.Port}]...");
                        var writeResult = await client.Agent.ServiceRegister(argument.AgentServiceRegistration);

                        if (!RegistrationWasSuccessfull(writeResult))
                        {
                            throw new ServiceDiscoveryResponseException("Registration in service discovery application failed.");
                        }

                        _logger?.LogInformation("Registration in service discovery application complete.");
                    }
                }
            }
            catch (ServiceDiscoveryResponseException exception)
            {
                _logger?.LogWarning("Service discovery application is not running.");
                _logger?.LogWarning($"Exception ({exception.GetType()}): {exception.Message}");
            }
            catch (Exception exception)
            {
                _logger?.LogWarning("Unexpected exception from service discovery application.");
                _logger?.LogWarning($"Exception ({exception.GetType()}): {exception.Message}");
            }
        }