/// <summary>
        /// Applies the option to the specified host configurator.
        /// </summary>
        /// <param name="configurator">The host configurator.</param>
        public void ApplyTo(HostConfigurator configurator)
        {
            var recoveryHostConfigurator = new ServiceRecoveryHostConfigurator();

            foreach (var option in serviceRecoveryOptions.Actions)
            {
                switch (option)
                {
                case RestartServiceRecoveryAction restartServiceRecoveryAction:
                    recoveryHostConfigurator.RestartService(restartServiceRecoveryAction.Delay / 60000);
                    break;

                case RestartSystemRecoveryAction restartSystemRecoveryAction:
                    recoveryHostConfigurator.RestartComputer(restartSystemRecoveryAction.Delay / 60000, restartSystemRecoveryAction.RestartMessage);
                    break;

                case RunProgramRecoveryAction runProgramRecoveryAction:
                    recoveryHostConfigurator.RunProgram(runProgramRecoveryAction.Delay / 60000, runProgramRecoveryAction.Command);
                    break;
                }
            }

            if (this.serviceRecoveryOptions.RecoverOnCrashOnly)
            {
                recoveryHostConfigurator.OnCrashOnly();
            }

            recoveryHostConfigurator.SetResetPeriod(this.serviceRecoveryOptions.ResetPeriod);

            configurator.AddConfigurator(recoveryHostConfigurator);
        }
        public static HostConfigurator EnableServiceRecovery(this HostConfigurator configurator, Action<ServiceRecoveryConfigurator> configureCallback)
        {
            if (configurator == null)
                throw new ArgumentNullException("configurator");
            if (configureCallback == null)
                throw new ArgumentNullException("configureCallback");

            var recoveryHostConfigurator = new ServiceRecoveryHostConfigurator();

            configureCallback(recoveryHostConfigurator);

            configurator.AddConfigurator(recoveryHostConfigurator);

            return configurator;
        }
        public static HostConfigurator EnableServiceRecovery(this HostConfigurator configurator, Action <ServiceRecoveryConfigurator> configureCallback)
        {
            if (configurator == null)
            {
                throw new ArgumentNullException("configurator");
            }
            if (configureCallback == null)
            {
                throw new ArgumentNullException("configureCallback");
            }

            var recoveryHostConfigurator = new ServiceRecoveryHostConfigurator();

            configureCallback(recoveryHostConfigurator);

            configurator.AddConfigurator(recoveryHostConfigurator);

            return(configurator);
        }