public ConsoleService(IServiceHostStart service, IServiceConfiguration configuration)
        {
            Guard.AgainstNull(service, nameof(service));
            Guard.AgainstNull(configuration, nameof(configuration));

            _configuration = configuration;
            _service       = service;
        }
        public static void Run(IServiceHostStart service)
        {
            if (CommandProcessed())
            {
                return;
            }

            Run(service, null);
        }
        private ServiceHost(IServiceHostStart service, IServiceConfiguration configuration)
        {
            Guard.AgainstNull(service, nameof(service));
            Guard.AgainstNull(configuration, nameof(configuration));

            _service = service;

            ServiceName = configuration.ServiceName;

            _log = GetServiceHostEventLog(configuration);

            AppDomain.CurrentDomain.UnhandledException += UnhandledException;
        }
        public static void Run(IServiceHostStart service)
        {
            Guard.AgainstNull(service, nameof(service));

            try
            {
                Console.CursorVisible = false;

                new ConsoleService(service).Execute();
            }
            catch (Exception ex)
            {
                Log.For(typeof(ServiceHost)).Fatal(ex.Message);
                throw;
            }
        }
        public static void Run(IServiceHostStart service, Action <IServiceConfiguration> configure)
        {
            if (CommandProcessed(configure))
            {
                return;
            }

            Guard.AgainstNull(service, nameof(service));

            var configuration = ServiceHostSection.Configuration();

            configure?.Invoke(configuration);

            if (!Environment.UserInteractive)
            {
                try
                {
                    Run(new ServiceBase[]
                    {
                        new ServiceHost(service, configuration)
                    });
                }
                catch (Exception ex)
                {
                    GetServiceHostEventLog(configuration).WriteEntry(ex.Message, EventLogEntryType.Error);
                    throw;
                }
            }
            else
            {
                try
                {
                    Console.CursorVisible = false;

                    new ConsoleService(service, configuration).Execute();
                }
                catch (Exception ex)
                {
                    Log.For(typeof(ServiceHost)).Fatal(ex.Message);
                    throw;
                }
            }
        }
        public ConsoleService(IServiceHostStart service)
        {
            Guard.AgainstNull(service, nameof(service));

            _service = service;
        }