/// <summary>
        /// The main setup and execution logic for the SynchroFeed.Console program.
        /// </summary>
        /// <param name="commandLineApp">The command line application containing the parsed command line parameters.</param>
        /// <returns>System.Int32.</returns>
        private static async Task <int> ExecuteAsync(ConsoleCommandLine commandLineApp)
        {
            try
            {
                var host = CreateHostBuilder(commandLineApp)
                           .Build();

                host.Services
                .GetService <ILoggerFactory>();

                NLog.LogManager.LoadConfiguration("nlog.config");

                try
                {
                    var actionProcessor = host.Services.GetRequiredService <IActionProcessor>();
                    await actionProcessor.ExecuteAsync(commandLineApp.Actions);
                }
                finally
                {
                    NLog.LogManager.Shutdown();
                }
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
                return(1);
            }

            return(0);
        }
        /// <summary>
        /// The entry point of the SynchroFeed.Console application.
        /// </summary>
        /// <param name="args">The arguments.</param>
        public static void Main(string[] args)
        {
            var commandLineApp = new ConsoleCommandLine();

            commandLineApp.OnExecute(() => ExecuteAsync(commandLineApp));
            commandLineApp.Execute(args);
        }
        /// <summary>
        /// Creates the host builder and initializes the application.
        /// </summary>
        /// <param name="commandLineApp">The parsed command line arguments.</param>
        /// <returns>Returns an instance of IHostBuilder.</returns>
        private static IHostBuilder CreateHostBuilder(ConsoleCommandLine commandLineApp)
        {
            var builder = new HostBuilder()
                          .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.SetBasePath(Directory.GetCurrentDirectory());
                config.AddJsonFile(Path.GetFullPath(commandLineApp.ConfigFile));
            })
                          .ConfigureServices((hostContext, services) =>
            {
                services.AddOptions();
                services.AddLogging();
                services.Configure <ApplicationSettings>(hostContext.Configuration.GetSection("FeedSettings"));
                services.AddSingleton(commandLineApp);
                services.AddSynchroFeed();
            })
                          .ConfigureLogging((hostingContext, logging) =>
            {
                logging.SetMinimumLevel(LogLevel.Trace);
                logging.AddNLog();
            });

            return(builder);
        }