Come ottenere l’elemento di configurazione

Helo

Qualcuno può spiegarmi come ottenere l’elemento di configurazione dal file .config. So come gestire gli attributi ma non gli elementi. Ad esempio, voglio analizzare seguente:

 
<![CDATA[
....
]]>
....

Il mio codice c # sembra finora:

  public class MyConfiguration : ConfigurationSection { [ConfigurationProperty("enabled", DefaultValue = "true")] public bool Enabled { get { return this["enabled"].ToString().ToLower() == "true" ? true : false; } } [ConfigurationProperty("header")] public string header { ??? } } 

Funziona con gli attributi, come faccio con gli elementi (proprietà dell’intestazione nel codice precedente)?

C’è un altro approccio per fare la stessa cosa.

Potremmo creare un elemento sovrascrivendo il metodo DeserializeElement per ottenere il valore di stringa:

 public class EmailTextElement : ConfigurationElement { public string Value { get; private set; } protected override void DeserializeElement(XmlReader reader, bool s) { Value = reader.ReadElementContentAs(typeof(string), null) as string; } } 

Ecco uno strumento di progettazione della sezione di configurazione personalizzato piuttosto buono che puoi utilizzare (ed è gratuito):

Designer di sezione di configurazione

MODIFICARE:

Stavo cercando MSDN e sembra che le sezioni di configurazione personalizzate non possano fare ciò che vuoi, ad es. ottenere il valore di configurazione da un elemento. Gli elementi di configurazione personalizzati possono contenere altri elementi di configurazione, ma i valori di configurazione provengono sempre dagli attributi.

Forse puoi mettere i tuoi frammenti di codice HTML in altri file e fare riferimento ad essi dalla configurazione, come questa.

  

Eredita la class ConfigurationElement e sovrascrive il suo metodo deserialize. Usa la nuova class per rappresentare elementi con contenuto testuale.

http://www.codeproject.com/KB/XML/ConfigurationTextElement.aspx

Lavorando con il tuo esempio, hai intenzione di sovrascrivere la deserializzazione di “header” in ConfigurationElement per ottenere il valore CDATA.

  
< ![CDATA[
....

]]> ....

È ansible utilizzare il metodo ConfigurationManager.GetSection (“SectionName”) per ottenere la sezione di configurazione nei file di configurazione.

Finalmente ho trovato un modo per farlo.

C’è l’interfaccia IConfigurationSectionHandler che consente le cose che voglio. Richiede a uno di scrivere il metodo

  public object Create(object parent, object configContext, XmlNode section) 

Dopo di esso, si analizza la sezione per conto proprio, quindi sono stato in grado di recuperare XmlElement senza problemi:

  header = s["header"] != null ? s["header"].InnerText : String.Empty; title = s["title"] != null ? s["title"].InnerText : String.Empty; 

Il lato negativo di questa interfaccia è obsoleto, ma MSDN afferma che non verrà rimosso dalle versioni future dei framework in quanto viene utilizzato internamente.

È ansible creare una class che eredita da System.Configuration.ConfigurationElement che rappresenta un elemento nella sezione di configurazione.

C’è un semplice esempio nella documentazione MSDN per ConfigurationElement .

Secondo MSDN , in .NET 4 è disponibile una nuova proprietà CurrentConfiguration che fornisce un riferimento all’istanza di Configuration livello superiore che rappresenta la gerarchia di configurazione a cui appartiene l’istanza ConfigurationElement corrente.