Ciao!
Questo metodo è un po macchinoso ma è quello che uso io.. scrivo tutti i passaggi poi magari buona parte li hai già fatti o non ti servono:
Prima creo una classe che implementa le proprietà che scriverò nel file di configurazione:
public class EmailSender
{
public string SMTPServerName { get; set; }
public string SMTPUserName { get; set; }
}
Poi creo una classe che deriva dal Configuration.Elements per permettere la lettura dal file di configurazione specificando nel file direttamente i nomi delle mie proprietà ( tipo <SMTPServerName>MioValore</SMTPServerName> )
public class EmailSenderElement : ConfigurationElement
{
public string InnerText { get; private set; }
protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
{
InnerText = reader.ReadElementContentAsString();
}
}
Poi creo una classe che mi permette di mappare dalla sezione del f ile di configurazione alla classe che utilizzerò nel codice
public class EmailSenderSection : ConfigurationSection
{
[ConfigurationProperty("SMTPServerName")]
public EmailSenderElement SMTPServerName
{
get { return this["SMTPServerName"] as EmailSenderElement; }
set { this["SMTPServerName"] = value; }
}
[ConfigurationProperty("SMTPUserName")]
public EmailSenderElement SMTPUserName
{
get { return this["SMTPUserName"] as EmailSenderElement; }
set { this["SMTPUserName"] = value; }
}
public EmailSender CreateEmailSenderFromConfig()
{
return new EmailSender()
{
SMTPServerName = this.SMTPServerName.InnerText,
SMTPUserName = this.SMTPUserName.InnerText,
};
}
}
Mi assicuro che il file di configurazione sia nel formato corretto:
Attenzione nel type della section deve esserci il nome del tuo progetto e della classe che va a mappare la section con la tua classe
<configuration>
<configSections>
<sectionGroup name="ApplicationConfiguration">
<section name="EmailSender" type="WinFormsApp1.EmailSenderSection, WinFormsApp1" />
</sectionGroup>
</configSections>
<ApplicationConfiguration>
<EmailSender>
<SMTPServerName>1</SMTPServerName>
<SMTPUserName>2</SMTPUserName>
</EmailSender>
</ApplicationConfiguration>
</configuration>
Infine nel codice richiamo i valori con il codice seguente
EmailSenderSection config = (EmailSenderSection)ConfigurationManager.GetSection("ApplicationConfiguration/EmailSender");
EmailSender emailSender = config.CreateEmailSenderFromConfig();
Spero possa esserti utile!
Fammi Sapere!
Maurizio