public ApplicationSettings Load(string filename)
        {
            ILegacySettingsResolver resolver = new DefaultLegacySettingsResolver();

            foreach (var factory in ReaderFactoryEnumeration(resolver, filename))
            {
                ISettingsReader reader = null;

                try
                {
                    // Create reader from factory.
                    reader = factory();

                    // Try to read settings.
                    ApplicationSettings settings = reader.Read();
                    if (settings != null)
                    {
                        Logger.Instance.WriteLine("Loaded settings from \"{0}\"", filename);

                        // Update current settings file.
                        if (CurrentSettingsFile != filename)
                        {
                            CurrentSettingsFile = filename;
                        }

                        return(settings);
                    }
                }
                // Stop iterating, file doesn't exist.
                catch (FileNotFoundException)
                {
                    break;
                }
                // Log other IO exceptions.
                catch (IOException e)
                {
                    Logger.Instance.WriteLine("Settings Error: [{0}] {1}", e.GetType().Name, e.Message);
                }
                finally
                {
                    if (reader != null)
                    {
                        reader.Dispose();
                    }
                }
            }

            // Failed to load.
            return(null);
        }
        public static ApplicationSettings Load(string path)
        {
            ILegacySettingsResolver resolver = new DefaultLegacySettingsResolver();

            foreach (Func <ISettingsReader> factory in ReaderFactoryEnumeration(resolver, path))
            {
                ISettingsReader settingsReader = null;

                try
                {
                    settingsReader = factory();

                    // Try to read settings.
                    var settings = settingsReader.Read();
                    if (settings != null)
                    {
                        Logger.Info($"Loaded settings from \"{path}\"");

                        return(settings);
                    }
                }
                catch (DirectoryNotFoundException)
                {
                    Logger.Info($"Failed to read \"{path}\": Folder does not exist.");
                    return(null);
                }
                catch (FileNotFoundException)
                {
                    // Stop iterating, file doesn't exist.
                    break;
                }
                catch (IOException e)
                {
                    // Log other IO exceptions.
                    Logger.Warn("Failed to read settings", e);
                }
                finally
                {
                    settingsReader?.Dispose();
                }
            }

            // Failed to load.
            return(null);
        }