Un peu plus compliqué, mais beaucoup plus flexible, la solution consiste à créer une classe qui représente une section de configuration. Dans votre app.config
/ web.config
le fichier, vous pouvez avoir ceci:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section must be the first section within the <configuration> node -->
<configSections>
<section name="DirectoryInfo" type="MyProjectNamespace.DirectoryInfoConfigSection, MyProjectAssemblyName" />
</configSections>
<DirectoryInfo>
<Directory MyBaseDir="C:\MyBase" Dir1="Dir1" Dir2="Dir2" />
</DirectoryInfo>
</configuration>
Puis, dans votre .NET code (je vais utiliser le C# dans mon exemple), vous pouvez créer deux classes comme ceci:
using System;
using System.Configuration;
namespace MyProjectNamespace {
public class DirectoryInfoConfigSection : ConfigurationSection {
[ConfigurationProperty("Directory")]
public DirectoryConfigElement Directory {
get {
return (DirectoryConfigElement)base["Directory"];
}
}
public class DirectoryConfigElement : ConfigurationElement {
[ConfigurationProperty("MyBaseDir")]
public String BaseDirectory {
get {
return (String)base["MyBaseDir"];
}
}
[ConfigurationProperty("Dir1")]
public String Dir1 {
get {
return (String)base["Dir1"];
}
}
[ConfigurationProperty("Dir2")]
public String Dir2 {
get {
return (String)base["Dir2"];
}
}
// You can make custom properties to combine your directory names.
public String Dir1Resolved {
get {
return System.IO.Path.Combine(MyBaseDir, Dir1);
}
}
}
}
Enfin, dans le code de votre programme, vous pouvez accéder à votre app.config
variables, à l'aide de vos nouvelles classes, de cette manière:
DirectoryInfoConfigSection config =
(DirectoryInfoConfigSection)ConfigurationManager.GetSection("DirectoryInfo");
String dir1Path = config.Directory.Dir1Resolved; // This value will equal "C:\MyBase\Dir1"