using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
namespace TestProject
{
/// <summary>
/// 구성 헬퍼
/// </summary>
public class ConfigurationHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 파일 경로
/// </summary>
private string configurationFilePath;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 구성 파일 경로 - ConfigurationFilePath
/// <summary>
/// 구성 파일 경로
/// </summary>
public string ConfigurationFilePath
{
get
{
return this.configurationFilePath;
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - ConfigurationHelper(assembly)
/// <summary>
/// 생성자
/// </summary>
/// <param name="assembly">어셈블리</param>
public ConfigurationHelper(Assembly assembly)
{
AssemblyName assemblyName = assembly.GetName();
string projectName = assemblyName.Name;
string projectVersion = assemblyName.Version.ToString();
this.configurationFilePath = Path.Combine
(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
projectName,
projectVersion,
$"{projectName}.config"
);
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 값 설정하기 - SetValue(key, value)
/// <summary>
/// 값 설정하기
/// </summary>
/// <param name="key">키</param>
/// <param name="value">값</param>
/// <returns>처리 결과</returns>
public bool SetValue(string key, string value)
{
try
{
Configuration configuration = GetConfiguration();
if(configuration.AppSettings.Settings.AllKeys.Contains(key))
{
configuration.AppSettings.Settings[key].Value = value;
}
else
{
configuration.AppSettings.Settings.Add(key, value);
}
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
return true;
}
catch
{
return false;
}
}
#endregion
#region 값 구하기 - GetValue(key)
/// <summary>
/// 값 구하기
/// </summary>
/// <param name="key">키</param>
/// <returns>값</returns>
public string GetValue(string key)
{
Configuration configuration = GetConfiguration();
if(configuration.AppSettings.Settings.AllKeys.Contains(key))
{
return configuration.AppSettings.Settings[key].Value;
}
else
{
return null;
}
}
#endregion
#region 키 제거하기 - RemoveKey(key)
/// <summary>
/// 키 제거하기
/// </summary>
/// <param name="key">키</param>
public void RemoveKey(string key)
{
Configuration configuration = GetConfiguration();
if(configuration.AppSettings.Settings.AllKeys.Contains(key))
{
configuration.AppSettings.Settings.Remove(key);
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
}
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 구성 구하기 - GetConfiguration()
/// <summary>
/// 구성 구하기
/// </summary>
/// <returns>구성</returns>
private Configuration GetConfiguration()
{
Configuration configuration;
if(string.IsNullOrWhiteSpace(this.configurationFilePath))
{
configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
else
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = this.configurationFilePath;
configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
}
return configuration;
}
#endregion
}
}