Click here to Skip to main content
15,889,200 members
Articles / Programming Languages / C#

App.Config Autoreader

Rate me:
Please Sign up or sign in to vote.
4.61/5 (9 votes)
14 Jan 2018CPOL3 min read 12.2K   140   11   6
Automatic read and convert data of App.Config settings keys

Introduction

In our day to day development, it is a rare case when we don’t need to read a configuration file.
There are many techniques for its treatment such as a static class, a singleton class, etc. It is also normal to make this config class be accessible throughout the project.

We will write a utility to automate the task of reading an app.config file. With this utility, you will forget about using the ConfigurationManager class and the System.Configuration assembly.

We will make use of dynamics.

App.Config Autoreader is an Open Source project and it is available inside of MoralesLarios.Development project in GitHub in this link.

Index

  1. Autoreader description
  2. Install and use
  3. Pros and Cons
  4. Autoreader Transforms Types
    • Strings values
    • Numerics values
    • Date and DateTime values
    • Bools values
    • Arrays values
  5. Force values to string
  6. Save special character

Autoreader Description

The autoreader action consists of app.config file read in the first step, convert values action for second step and final step, creation result class.

Image 1

Simple example of a string value.

Image 2

The process transforms the string key value to a strong type target variable.

The Config class, is responsible for exposing the transformed app.config values.

The Config class expose the app.Config values with strong types, but in a dynamic property.

Install and Use

  1. For use, we download a nuget package MoralesLarios.Development.

    Image 3

    Image 4

    Install-Package MoralesLarios.Development.

  2. Add one setting in an app.config file.
    XML
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
    
      <appSettings>
        <add key="FilterDate" value="01/01/2018"/>
      </appSettings>
    
    </configuration>
  3. Add using in the consumer class.
    C#
    using MoralesLarios.Development.Configuration;
  4. Create a new variable of our app.config settings key and call Config.ConfigNodes.[app.config_keyName].
    C#
    static void Main(string[] args)
    {
        DateTime filterDate = Config.ConfigNodes.FilterDate;
    }

Image 5

All code.

C#
using MoralesLarios.Development.Configuration;
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime filterDate = Config.ConfigNodes.FilterDate;
        }
    }
}

The execution read a DateTime value.

Image 6

Prons and Cons

These are the pros and cons of Autoreader App.Config utility:

Pros:

  • Faster reader
  • Faster transform
  • Simple use and compression
  • Add a new key in app.config and it is available in this time.

Cons:

  • The app values are exposed in dynamics values, so that we lost the intellisense.

Autoreader Transforms Types

Autoreader utility can transform values of same types:

  • Strings
  • Numerics
  • Dates and DateTimes
  • Bools
  • Array of
    • Strings Arrays
    • Numerics Arrays
    • DateTimes Arrays
    • Bools Arrays

We will explain each one of them in depth.

Strings Values

Is the very single process and transform the string app.config key value to string variable destination.

Image 7

Numerics Values

The process for numerics values is very similar to string values. In this action, the string app.config key value is transformed to decimal value.

We decided to choose a decimal type for numerics values for including all numerics types (short, int, double, etc.).

Image 8

Date and DateTime Values

In this action, the string app.config key value is transformed to datetime value.

Date

Image 9

DateTime

Image 10

Bools Values

In this action, the string app.config key value is transformed to bool value.

Image 11

Arrays Values

The array process is the same of the another’s types, but with the deference, the app.config key value should contain an internal ‘;’ value, for delimiting some array nodes.

This rule is valid for all arrays types.

Image 12

Its result:

Image 13

Force Values to String

In cases we may need to read app.config key values of types (numerics, datetimes, bools, etc.) as a strings values, we can use (‘’) for forcing a string read value.

Image 14

Variable value.

Image 15

Image 16

Save Special Character

If we want read an app.config key with special character as ( ; or ‘’), we can preceded the ‘\’ backslash the special character.

Image 17

Example:

Image 18

Image 19

History

  • 14th January, 2018: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Cecabank
Spain Spain
MVP C# Corner 2017

MAP Microsoft Active Professional 2014

MCPD - Designing and Developing Windows Applications .NET Framework 4
MCTS - Windows Applications Development .NET Framework 4
MCTS - Accessing Data Development .NET Framework 4
MCTS - WCF Development .NET Framework 4

Comments and Discussions

 
QuestionMy vote of #2 Pin
BillWoodruff16-Jan-18 13:14
professionalBillWoodruff16-Jan-18 13:14 
AnswerRe: My vote of #2 Pin
Juan Francisco Morales Larios16-Jan-18 14:39
Juan Francisco Morales Larios16-Jan-18 14:39 
GeneralRe: My vote of #2 Pin
BillWoodruff18-Jan-18 16:38
professionalBillWoodruff18-Jan-18 16:38 
Greetings Juan,

I really appreciate your open-minded response to my comments. And, I have changed my vote to #4 because I think someone can learn a lot studying your code; however I still don't see your approach as an optimal strategy ... let me try to explain why:

When it is this simple to manage (design-time created) settings at run-time:
// set a pre-defined setting
Properties.Settings.Default.FormColor = Color.AliceBlue;  

// save all settings
Properties.Settings.Default.Save();  

// load and apply a setting  
this.BackColor = Properties.Settings.Default.FormColor;  
And, there are other techniques for creating multiple Application Settings: [^].

Certain Control Properties, like Font, are difficult to serialize because they are aggregates of other properties, but easy to change and persist using App Settings.

So, I perceive a solution like the one you describe here as being an elaborate way to persist settings; however, when you are going beyond just saving rarely changed settings into persisting the current state of complex objects, then I see serialization as a standard, well worked-out, canonical strategy.

imho, there's some overlap with the role of Resources here.

best wishes, Bill
«... thank the gods that they have made you superior to those events which they have not placed within your own control, rendered you accountable for that only which is within you own control For what, then, have they made you responsible? For that which is alone in your own power—a right use of things as they appear.» Discourses of Epictetus Book I:12


modified 18-Jan-18 22:45pm.

GeneralRe: My vote of #2 Pin
Juan Francisco Morales Larios19-Jan-18 2:23
Juan Francisco Morales Larios19-Jan-18 2:23 
Questionwhat is the license of your GitHub project? Pin
Southmountain15-Jan-18 11:03
Southmountain15-Jan-18 11:03 
AnswerRe: what is the license of your GitHub project? Pin
Juan Francisco Morales Larios15-Jan-18 21:08
Juan Francisco Morales Larios15-Jan-18 21:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.