Сохранение настроек приложения с Singleton - C#
Формулировка задачи:
Здравствуйте. Как сохранять настройки приложения (по выбору пользователя в xml файл или реестр) с использованием паттерна Singleton?
Правильно ли я думаю, что сначала реализуем класс Singleton:
внутри пишем 2 метода для сохранения в xml и в реестр, получается так:
Дальше на форме ставим, к примеру, 2 радиобаттона (для выбора куда сохранять). И пишем обработчик для кнопки сохранения, что-то вроде этого:
Так? Или чего то не хватает? Или это вообще не правильно? Помогите
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton GetInstance()
{
if(instance == null)
{
instance = new Singleton();
}
return instance;
}
} 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
}
} 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);
}
}
}