Gady
Gady

Reputation: 1514

config and settings component for C#

I'm starting to design a config and settings component for an application. I need an easy way to read dictionary style settings and also a way to store simple arrays into a persistence level.

is there a commonly used component already available ? (something like log4net for logging) what options should I look into ?

Upvotes: 3

Views: 2877

Answers (7)

RichardOD
RichardOD

Reputation: 29157

For noddy apps I use appSettings. For enterprise apps I usually create some custom config sections. CodeProject has some excellent articles on this.

For your scenario of key/value pairs I'd probably use something like this.

Upvotes: 0

Jeff
Jeff

Reputation:

Building a dictionary in the standard settings

Using the standard Settings, it isn't possible to store dictionary style settings.

To emulate the System.Collections.Specialized.StringDictionary, what I've done in the past is used two of the System.Collections.Specialized.StringCollection typed settings (this is one of your options for the setting type). I created one called Keys, and another called values. In a class that needs these settings I've created a static constructor and looped through the two StringCollections and built the StringDictionary into a public static property. The dictionary is then available when needed.

public static StringDictionary NamedValues = new StringDictionary();
public static ClassName() // static construtor
{
  StringCollection keys = Properties.Settings.Default.Keys;
  StringCollection vals = Properties.Settings.Default.Values;
  for(int i = 0; i < keys.Count(); i++)
  {
     NamedValues.Add(keys[i], vals[i]);
  }
}

Upvotes: 0

Mark
Mark

Reputation: 2432

If you expand the Properties folder in the SolutionExplorer you should find a Settings.Settings item. Double clicking on this will open the settings editor. This enables you to declare and provide initial values for settings that can either be scoped to the application or the current user. Since the values are persisted in Isolated storage you do not need to worry about what privileges the user is executing under.

For a wee example:

I created a new string setting with the name Drink and a TextBox named drinkTextBox. The code to assign the current value to the text box is:

drinkTextBox.Text = Properties.Settings.Default.Drink;

and to update the value persisted:

Properties.Settings.Default.Drink = drinkTextBox.Text;
Properties.Settings.Default.Save();

Upvotes: 4

James Conigliaro
James Conigliaro

Reputation: 3827

We'll often create a sealed class that has a number of properties that wrap calls to the the System.Configuration.ConfigurationManager class. This allows us to use the standard configuration managagement capabilities offered by the class and the app/web.config file but make the data very easy to access by other classes.

For example we might create a property to expose the connection string to a database as

public static string NorthwindConnectionString
{
  get{return ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString
}

While it creates a wrapper around one line of code, which we usually try to avoid, it does make certain confiuration properties accessible via intellisense and provides some insullation around changes to the location of underlying configuration data. If we wanted to move the connection string to the registry, we could do so without major impact to the application.

We find this most helpful when we have larger teams or when we need to hand off code from one team to another. It keeps people from needing to remember what the various settings were named in the config files and even where configuration information is stored (config file, database, registry, ini file, etc.)

Upvotes: 2

Pondidum
Pondidum

Reputation: 11627

Depending on how flexible you want it to be, you can use the build in Settings designer (go to Project Properties > Settings) and you can add settings there.

These are strongly typed and accessible through code. It has built in features like Save, Load and Reload

Upvotes: 3

Chris Van Opstal
Chris Van Opstal

Reputation: 37567

Take a look at App.Config and the ConfigurationManager class.

Upvotes: 4

Anton Gogolev
Anton Gogolev

Reputation: 115809

You don't really need to do that: .NET BCL already has everything you need.

Upvotes: 5

Related Questions