Bonjour,

J'essaie de personnaliser un fichier de configuration en C#.
J'aimerais obtenir quelque chose de la sorte :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="View" type="App.Config.ViewHandler, App" />
  </configSections>
 
  <View type="App.Config.View, App">
    <MainWindow width="1000" height="800">
      <MenuBar />
	  <Toolbar />
 
    </MainWindow>
  </View>
</configuration>
En fait, on a une balise vue avec comme sous-noeud la fenêtre principale et ses attributs. Ensuite, la fenêtre principale à des sous-noeuds correspondants aux différents contrôles fils de l'interface.

J'ai donc l'implémentation suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class ConfigManager
{
	private View m_view;
	public View ConfView { get { return m_view; } }
 
	// Constructor
	public ConfigManager() {}
 
	public void Load()
	{
		m_view = (View)ConfigurationManager.GetSection("View");
	}
}
 
// Generic class to deserialize a section.
class NodeHandler<T> : IConfigurationSectionHandler
{
	public object Create(object parent, object configContext, XmlNode section)
	{
		XmlSerializer xs = new XmlSerializer(typeof(T));
		XmlNodeReader xnr = new XmlNodeReader(section);
		return xs.Deserialize(xnr);
	}
}
 
// View configuration class.
public class View
{
	private MainWindow m_mainWindow;
 
	public MainWindow ConfMainWindow
	{
		get { return m_mainWindow; }
		set { m_mainWindow = value; }
	}
}
 
// Deserialize the view section.
class ViewHandler : NodeHandler<View> {}
Actuellement, j'ai une exception levée au niveau de la méthode Create de ViewHandler et plus précisément quand le constructeur XmlSerializer est appelé.

Je dois mal définir les sous-noeuds dans mon fichier de configuration.
Avez-vous une idée?

Merci

Edit : Un premier problème est le fait que je n'appelle pas ma propriété de la même façon que la balise dans le fichier de configuration. Après modification, je n'ai plus d'exception mais j'ai toujours un problème de structure :s. Des idées ?