I HATE “ConfigurationSettings.AppSettings” !!!!
That being said, .NET gives us a great alternative that no one talks about, custom configuration sections. It gives us a fully nestable and strongly typed config section.
Add a new class:
using System;
using System.Configuration;
namespace ISI.HAPP.API
{
public sealed partial class Configuration : ConfigurationSection
{
public class AuthenicationParameters : ConfigurationElement
{
#region UseNTPermissions
/// <summary>
/// Gets or sets the UseNTPermissions.
/// </summary>
[ConfigurationProperty("UseNTPermissions", IsRequired = true)]
public bool UseNTPermissions
{
get
{
return (bool)base["UseNTPermissions"];
}
set
{
base["UseNTPermissions"] = value;
}
}
#endregion
#region DefaultNTDomain
/// <summary>
/// Gets or sets the DefaultNTDomain.
/// </summary>
[ConfigurationProperty("DefaultNTDomain", IsRequired = false)]
public string DefaultNTDomain
{
get
{
return (string)base["DefaultNTDomain"];
}
set
{
base["DefaultNTDomain"] = value;
}
}
#endregion
}
#region Current
public static readonly Configuration Current;
static Configuration()
{
const string ConfigurationSectionName = "ISI.HAPP.API.Configuration";
Current = null;
if (Current == null) Current = (Configuration)(System.Configuration.ConfigurationManager.GetSection(ConfigurationSectionName));
if (Current == null) throw new Exception(string.Format("Missing {0} Configuration Section", ConfigurationSectionName));
}
#endregion
public Configuration() : base() { }
#region CompanyName
[ConfigurationProperty("CompanyName", IsRequired = false)] public string CompanyName
{
get
{
return (string)base["CompanyName"];
}
set
{
base["CompanyName"] = value;
}
}
#endregion
#region Authenication
public AuthenicationParameters Authenication
{
get
{
return (AuthenicationParameters)base["Authenication"];
}
}
#endregion
}
}
and add the following to the “configSections” of your app/web.config:
<section name="ISI.HAPP.API.Configuration" type="ISI.HAPP.API.Configuration, ISI.HAPP.API.Core" requirePermission="false"/>
and the following after the “configSections”
<ISI.HAPP.API.Configuration>
<CompanyName>ISI</CompanyName>
<Authenication>
<UseNTPermissions>true</UseNTPermissions>
<DefaultNTDomain>ISI</DefaultNTDomain>
</Authenication>
</ISI.HAPP.API.Configuration>
It’s that simple …….

DotNetShoutout Custom Configuration section