using System;
using System.ComponentModel;
using System.Configuration;
namespace Hemit.OpPlan.Common.Extensions
{
/// <summary>
/// Utility methods for ConfigurationManager. Also included methods for handling OpenExeConfiguration (running process configuration, for example in tests and installers)
/// </summary>
public static class ConfigurationManagerWrapper
{
/// <summary>
/// Sets an appsetting for the exe configuration
/// </summary>
/// <param name="appsetting"></param>
/// <param name="value"></param>
public static void SetAppsettingForExecConfiguration(string appsetting, object value)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings[appsetting].Value = Convert.ToString(value);
config.Save(ConfigurationSaveMode.Modified);
}
/// <summary>
/// Sets an appsetting for the exe configuration
/// </summary>
/// <param name="appsetting"></param>
/// <param name="value"></param>
public static string GetAppsettingExecConfiguration(string appsetting, object value)
{
return ConfigurationManager.AppSettings[appsetting];
}
/// <summary>
/// Sets an appsetting for the exe configuration
/// </summary>
/// <param name="appsetting"></param>
/// <param name="value"></param>
public static void SetAppsettingForConfiguration(string appsetting, object value)
{
ConfigurationManager.AppSettings[appsetting] = Convert.ToString(value);
}
/// <summary>
/// Sets an appsetting for the exe configuration
/// </summary>
/// <param name="appsetting"></param>
/// <param name="value"></param>
public static string GetAppsettingForExecConfiguration(string appsetting, object value)
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
return config.AppSettings.Settings[appsetting].Value;
}
/// <summary>
/// Use this extension method to get a strongly typed app setting from the configuration file.
/// Returns app setting in configuration file if key found and tries to convert the value to a specified type. In case this fails, the fallback value
/// or if NOT specified - default value - of the app setting is returned
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="appsettingKey"></param>
/// <param name="fallback"></param>
/// <returns></returns>
public static T GetAppsetting<T>(string appsettingKey, T fallback = default(T))
{
string val = ConfigurationManager.AppSettings[appsettingKey] ?? "";
if (!string.IsNullOrEmpty(val))
{
try
{
Type typeDefault = typeof(T);
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter.CanConvertFrom(typeof(string)) ? (T)converter.ConvertFrom(val) : fallback;
}
catch (Exception err)
{
Console.WriteLine(err); //Swallow exception
return fallback;
}
}
return fallback;
}
}
}
Showing posts with label #net. Show all posts
Showing posts with label #net. Show all posts
Friday, 28 February 2020
Strongly typed ConfigurationManager in .NET Framework
Handling configuration files in .NET Framework is often tedious. You retrieve the app setting as a string and must then parse it out. Dont you wish we could have a generic method to get a strongly typed app setting instead and spare ourselves with some code ? Sure you can!
Subscribe to:
Comments (Atom)