Сохранение настроек приложения с Singleton - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Как сохранять настройки приложения (по выбору пользователя в xml файл или реестр) с использованием паттерна Singleton? Правильно ли я думаю, что сначала реализуем класс Singleton:
        public class Singleton
        {
            private static Singleton instance;
 
            private Singleton() { }
 
            public static Singleton GetInstance()
            {
                if(instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
 
        }
внутри пишем 2 метода для сохранения в xml и в реестр, получается так:
        public class Singleton
        {
            private static Singleton instance;
 
            private Singleton() { }
 
            public static Singleton GetInstance()
            {
                if(instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
 
            public void In_Regedit()
            {
                     //код для сохранения в реестр
            }
 
            public void In_XML_file()
            {
                     //код для сохранения в xml
            }
 
        }
Дальше на форме ставим, к примеру, 2 радиобаттона (для выбора куда сохранять). И пишем обработчик для кнопки сохранения, что-то вроде этого:
            if(in_regedit.Checked == true)
            {
                Singleton.GetInstance().In_Regedit();
            }
            else if(in_xml.Checked == true)
            {
                Singleton.GetInstance().In_XML_file();
            }
Так? Или чего то не хватает? Или это вообще не правильно? Помогите

Решение задачи: «Сохранение настроек приложения с Singleton»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace Wpf_Settings.Configuration
{
    public class AppSettings
    {
        public string Text { get; set; }
    }
 
    /// <summary>
    /// Тип репозитория
    /// </summary>
    public enum RepositoryType
    {
        Unknown,
        Xml,
        Registry
    }
 
    public class SettingsManager
    {
        private static readonly SettingsManager _instance;
        private Dictionary<RepositoryType, ISettingsRepository> _repositories;
        private ISettingsRepository _currentRepository;
        private AppSettings _settings;
 
        /// <summary>
        /// Статический конструктор, нет в данном случае делать ленивую инициализацию, 
        /// так как сразу же при старте приложения она и так происходит и смысла потом 
        /// каждое обращение к свойству <see cref="Instance"/> проверять его на null нет.
        /// </summary>
        static SettingsManager()
        {
            _instance = new SettingsManager();
        }
 
        /// <summary>
        /// Проинициализировать репозитории.
        /// </summary>
        /// <param name="repositories"></param>
        public void Initialize(Dictionary<RepositoryType, ISettingsRepository> repositories)
        {
            if (_repositories != null)
            {
                throw new Exception("_repositories уже был проинициализирован");
            }
            _repositories = repositories;
        }
 
        /// <summary>
        /// Единственный экземпляр менеджера настроек
        /// </summary>
        public static SettingsManager Instance
        {
            get { return _instance; }
        }
 
        /// <summary>
        /// Настройки приложения
        /// </summary>
        public AppSettings Settings
        {
            get { return _settings; }
        }
 
        /// <summary>
        /// Выбрать репозиторий
        /// </summary>
        /// <param name="type"></param>
        public void ChooseRepository(RepositoryType type)
        {
            _currentRepository = _repositories[type];
        }
 
        /// <summary>
        /// Загрузить настройки
        /// </summary>
        public void LoadSettings()
        {
            _settings = _currentRepository.Load();
        }
 
        /// <summary>
        /// Сохранить настройки
        /// </summary>
        public void SaveSettings()
        {
            _currentRepository.Save(Settings);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5