patterncsharpMajor
Getting/setting default values from my App.config
Viewed 0 times
appgettingsettingdefaultconfigvaluesfrom
Problem
Imagine that I need a color palette for my Winforms application to have a consistent look.
What I did was create a static helper class and helper methods that I can call from anywhere in my code, and invoke what I need from the
Here for example, I am getting the school name from the
Usage:
Are there any glaring mistakes I'm making by choosing this type of architecture?
What I did was create a static helper class and helper methods that I can call from anywhere in my code, and invoke what I need from the
App.settings file.Here for example, I am getting the school name from the
App.config file, so I can sell this application to other schools with minimal changes on my part.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace Uboldi.Helpers
{
public static class CustomizationHelper
{
public static string GetSchoolName()
{
return ConfigurationManager.AppSettings["schoolName"];
}
}
}
Usage:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Uboldi.Helpers;
namespace Uboldi
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
LoadFormTitle();
}
private void LoadFormTitle()
{
var schoolName = CustomizationHelper.GetSchoolName();
this.Text = String.Format("Sistema {0} - Pagina Principal", schoolName);
}
}
}Are there any glaring mistakes I'm making by choosing this type of architecture?
Solution
While somewhat of a tangent from your question but you may find it helpful nonetheless.
I would recommend looking at a custom ConfigurationSection which allows you to define more complex configuration hierarchies that are strongly-typed. I find it much easier to use a custom configuration section than having to remember a bunch of magic strings in the appSettings element and also allows you to specific which values are required, what the defaults values are, etc.
Using a custom configuration section you could create a configuration type like:
Then to load that configuration type:
The app.config then would look something like this:
Lastly, you use the configuration by:
A couple of notes:
I would recommend looking at a custom ConfigurationSection which allows you to define more complex configuration hierarchies that are strongly-typed. I find it much easier to use a custom configuration section than having to remember a bunch of magic strings in the appSettings element and also allows you to specific which values are required, what the defaults values are, etc.
Using a custom configuration section you could create a configuration type like:
public class UboldiConfigurationSection : System.Configuration.ConfigurationSection {
[ConfigurationProperty("schoolName")]
public string SchoolName {
get { return (string)this["schoolName"]; }
set { this["schoolName"] = value; }
}
}Then to load that configuration type:
public static class UboldiApplication {
public static UboldiConfigurationSection Config { get; internal set; }
public static void Initialize() {
Config = ConfigurationManager.GetSection("uboldi") as UboldiConfigurationSection;
}
}The app.config then would look something like this:
Lastly, you use the configuration by:
public void Test() {
//This only needs to be done once, presumably in your Program.Main method
UboldiApplication.Initialize();
var name = UboldiApplication.Config.SchoolName;
}A couple of notes:
- You'll need to reference the System.Configuration assembly as it's not usually referenced in VS by default.
- The
ConfigurationManager.GetSection("uboldi")is expecting the name of the section in the app.config file. You'll note that this matches in the example above.
- The section element in the app.config file uses the standard .Net type name convention to locate the specified configuration section. In this example I am assuming that the
UboldiConfigurationSectiontype is the Uboldi namespace and in an Uboldi assembly (dll or exe).
- You can add hierarchy by creating
ConfigurationElementsub classes and using them as properties in your configuration section and elements.
- The link above is for a Web.config, but the same thing is possible in an app.config file.
Code Snippets
public class UboldiConfigurationSection : System.Configuration.ConfigurationSection {
[ConfigurationProperty("schoolName")]
public string SchoolName {
get { return (string)this["schoolName"]; }
set { this["schoolName"] = value; }
}
}public static class UboldiApplication {
public static UboldiConfigurationSection Config { get; internal set; }
public static void Initialize() {
Config = ConfigurationManager.GetSection("uboldi") as UboldiConfigurationSection;
}
}<configuration>
<configSections>
<section name="uboldi" type="Uboldi.UboldiConfigurationSection, Uboldi" />
</configSections>
<uboldi schoolName="Fillmore Central" />
</configuration>public void Test() {
//This only needs to be done once, presumably in your Program.Main method
UboldiApplication.Initialize();
var name = UboldiApplication.Config.SchoolName;
}Context
StackExchange Code Review Q#186, answer score: 45
Revisions (0)
No revisions yet.