10 votes

Comment lire cette configuration personnalisée depuis App.config ?

Comment lire cette configuration personnalisée depuis App.config ?

<root name="myRoot" type="rootType">
    <element name="myName" type="myType" />
    <element name="hisName" type="hisType" />
    <element name="yourName" type="yourType" />
  </root>

Plutôt que ça :

<root name="myRoot" type="rootType">
  <elements>
    <element name="myName" type="myType" />
    <element name="hisName" type="hisType" />
    <element name="yourName" type="yourType" />
  </elements>
  </root>

31voto

Matthew Abbott Points 32861

Pour permettre à vos éléments de collection de se situer directement dans l'élément parent (et non pas dans un élément de collection enfant), vous devez redéfinir votre fichier ConfigurationProperty . Par exemple, disons que j'ai un élément de collection tel que :

public class TestConfigurationElement : ConfigurationElement
{
    [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
    public string Name
    {
        get { return (string)this["name"]; }
    }
}

Et une collection telle que :

[ConfigurationCollection(typeof(TestConfigurationElement), AddItemName = "test")]
public class TestConfigurationElementCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new TestConfigurationElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((TestConfigurationElement)element).Name;
    }
}

Je dois définir la section/élément parent comme suit :

public class TestConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("", IsDefaultCollection = true)]
    public TestConfigurationElementCollection Tests
    {
        get { return (TestConfigurationElementCollection)this[""]; }
    }
}

Remarquez le [ConfigurationProperty("", IsDefaultCollection = true)] attribut. En lui donnant un nom vide, et en le définissant comme la collection par défaut, je peux définir ma configuration comme suit :

<testConfig>
  <test name="One" />
  <test name="Two" />
</testConfig>

Au lieu de :

<testConfig>
  <tests>
    <test name="One" />
    <test name="Two" />
  </tests>
</testConfig>

7voto

SaravananArumugam Points 1949

Vous pouvez utiliser la méthode System.Configuration.GetSection() pour lire les sections de configuration personnalisées.

Se référer à http://msdn.microsoft.com/en-us/library/system.configuration.configuration.getsection.aspx pour en savoir plus sur GetSection()

4voto

Haukman Points 1189

Comme il ne s'agit pas du format de fichier de configuration standard, vous devrez ouvrir le fichier de configuration en tant que document XML, puis en extraire les sections (en utilisant XPath par exemple). Ouvrez le document avec ceci :

// Load the app.config file
XmlDocument xml = new XmlDocument();
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

0voto

Bibhu Points 2607

Je pense que vous pouvez utiliser

            XmlDocument appSettingsDoc = new XmlDocument();
            appSettingsDoc.Load(Assembly.GetExecutingAssembly().Location + ".config");
            XmlNode node = appSettingsDoc.SelectSingleNode("//appSettings");

            XmlElement element= (XmlElement)node.SelectSingleNode(string.Format("//add[@name='{0}']", "myname"));
            string typeValue = element.GetAttribute("type");

J'espère que cela résout votre problème. Bon codage :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X