Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Files di configurazione Uso Oggetti di binding configurazione

From Aino Wiki

Jump to: navigation, search

Uso delle Config Sections

Questo argomento è noto anche come Custom Configuration Sections usando le cosiddette ConfigurationSection<code> nel file di configurazione.
</code>

E' possibile creare oggetti che esportano la configurazione di una applicazione acquisendone struttura oltre che contenuto. Tale configurazione sarà impostata nel file di configurazione che, ad es. per un'applicazione WEB è il web.config, per una applicazione console/Windows Form è l'app.config.
Ecco un esempio rielaborato da stackoverflow che espone il minimo del codice da implementare.

Es. 1, File di configurazione

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
  <configSections>
    <section name="UrlConfigSection" 
             type="Applicazione_di_Test.CustomConfigSection.EntityCodeUrlSection, Applicazione_di_Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
             allowDefinition="Everywhere" 
             allowExeDefinition="MachineToApplication" 
             restartOnExternalChanges="true" />
  </configSections>
 
  <UrlConfigSection>
    <UrlSection>
      <add EntityCode="FA" CompleteDataUrl="xxx" PartialDataUrl="yyy" />
      <add EntityCode="FS" CompleteDataUrl="xxx" />
    </UrlSection>
  </UrlConfigSection>
 
</configuration>

Notare gli elementi in

configSections

, in questa regione si elencano le sezioni di configurazione da esportare. Mentre le regioni con le informazioni seguono identificate il TAG "radice" che si chiama come l'attributo name usato nelle section elencate prima, nell'esempio di prima notare che "UrlConfigSection" ha una "Property" identificata con 'UrlSection' che ha al suo interno una collection di elementi con attributi: 'EntityCode', 'CompleteDataUrl', 'PartialDataUrl' (opzionali).Attenzione all'attributo Type della section, in cui è indicato il path della classe ed il namespace.

Es. 1, Classe di configurazione

Queste informazioni saranno poi esportate e rappresentate in una classe di cui riporto il codice:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
 
namespace Applicazione_di_Test.CustomConfigSection
{
    public class EntityCodeUrlSection : ConfigurationSection
    {
        [ConfigurationProperty("UrlSection", IsDefaultCollection = false)]
        [ConfigurationCollection(typeof(UrlSectionCollection), AddItemName = "add", ClearItemsName = "clear", RemoveItemName = "remove")]
        public UrlSectionCollection UrlSection
        {
            get
            {
                UrlSectionCollection commands =
                    (UrlSectionCollection)base["UrlSection"];
                return commands;
            }
        }
    }
 
    public class UrlSectionCollection : ConfigurationElementCollection
    {
        public override ConfigurationElementCollectionType CollectionType
        {
            get
            {
                return ConfigurationElementCollectionType.AddRemoveClearMap;
            }
        }
 
        protected override ConfigurationElement CreateNewElement()
        {
            return new UrlSectionItem();
        }
 
        protected override Object GetElementKey(ConfigurationElement element)
        {
            return ((UrlSectionItem)element).EntityCode;
        }
 
        public UrlSectionItem this[int index]
        {
            get
            {
                return (UrlSectionItem)BaseGet(index);
            }
            set
            {
                if (BaseGet(index) != null)
                {
                    BaseRemoveAt(index);
                }
                BaseAdd(index, value);
            }
        }
    }
 
 
    public class UrlSectionItem : ConfigurationElement
    {
        [ConfigurationProperty("EntityCode", DefaultValue = "", IsRequired = true, IsKey = true)]
        public string EntityCode
        {
            get
            {
                return (string)this["EntityCode"];
            }
            set
            {
                this["EntityCode"] = value;
            }
        }
 
        [ConfigurationProperty("CompleteDataUrl", DefaultValue = "", IsRequired = true, IsKey = false)]
        public string CompleteUrl
        {
            get
            {
                return (string)this["CompleteDataUrl"];
            }
            set
            {
                this["CompleteDataUrl"] = value;
            }
        }
 
        [ConfigurationProperty("PartialDataUrl", DefaultValue = "", IsRequired = false, IsKey = false)]
        public string PartialDataUrl
        {
            get
            {
                return (string)this["PartialDataUrl"];
            }
            set
            {
                this["PartialDataUrl"] = value;
            }
        }
    }
}

Es. 1, uso della classe con i dati

Poi sarà usato come nell'esempio che segue:

using Applicazione_di_Test.CustomConfigSection;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
 
namespace Applicazione_di_Test
{
    class Program
    {
        static void Main(string[] args)
        {
 
            EntityCodeUrlSection urlConfigSection = (EntityCodeUrlSection)ConfigurationManager.GetSection("UrlConfigSection");
 
            int urlEntitycounter = urlConfigSection.UrlSection.Count;
            Console.WriteLine(string.Format("Nr di entità: {0}, seguono le info della prima.", urlEntitycounter));
 
            Console.WriteLine(string.Format("EntityCode={0}, CompleteDataUrl={1}, PartialDataUrl={2}", 
                urlConfigSection.UrlSection[0].EntityCode, 
                urlConfigSection.UrlSection[0].CompleteUrl, 
                urlConfigSection.UrlSection[0].PartialDataUrl, 
                ));
 
        }
    }
}

Notare l'oggetto 'urlConfigSection.UrlSection[0]' ha tutte le property ottenibili via intellisense.



C# | Files di configurazione


Visual Studio

Author