Utilizarea atributelor, secțiunilor și constrângerilor configurării copiilor
Există, de asemenea, posibilitatea de a folosi atribute care au în mod automat grijă de instalații sanitare, precum și posibilitatea de a adăuga cu ușurință constrângeri.
Aici prezint un exemplu de cod care mă folosesc pe unul din site-urile mele. Cu o constrângere eu dictez volumul maxim de spațiu pe disc pe care un utilizator este permis să îl folosească.
MailCenterConfiguration.cs:
namespace Ani {
public sealed class MailCenterConfiguration : ConfigurationSection
{
[ConfigurationProperty("userDiskSpace", IsRequired = true)]
[IntegerValidator(MinValue = 0, MaxValue = 1000000)]
public int UserDiskSpace
{
get { return (int)base["userDiskSpace"]; }
set { base["userDiskSpace"] = value; }
}
}
}
Acest lucru este configurat în web.config ca atare
<!-- Mailcenter configuration file -->
...
Elemente pentru copii
Elementul copil xml mail este creat în același fișier .cs ca cel de mai sus. Aici am adăugat constrângeri în port. Dacă portului i se atribuie o valoare care nu se încadrează în acest interval, timpul de execuție se va plânge când se va încărca config-ul.
MailCenterConfiguration.cs:
public sealed class MailCenterConfiguration : ConfigurationSection
{
[ConfigurationProperty("mail", IsRequired=true)]
public MailElement Mail
{
get { return (MailElement)base["mail"]; }
set { base["mail"] = value; }
}
public class MailElement : ConfigurationElement
{
[ConfigurationProperty("host", IsRequired = true)]
public string Host
{
get { return (string)base["host"]; }
set { base["host"] = value; }
}
[ConfigurationProperty("port", IsRequired = true)]
[IntegerValidator(MinValue = 0, MaxValue = 65535)]
public int Port
{
get { return (int)base["port"]; }
set { base["port"] = value; }
}
Utilizați
Pentru a-l utiliza apoi practic în cod, tot ce trebuie să faceți este să instanțiați MailCenterConfigurationObject, acesta va automat citi secțiunile relevante din web.config.
MailCenterConfiguration.cs
private static MailCenterConfiguration instance = null;
public static MailCenterConfiguration Instance
{
get
{
if (instance == null)
{
instance = (MailCenterConfiguration)WebConfigurationManager.GetSection("mailCenter");
}
return instance;
}
}
AnotherFile.cs
public void SendMail()
{
MailCenterConfiguration conf = MailCenterConfiguration.Instance;
SmtpClient smtpClient = new SmtpClient(conf.Mail.Host, conf.Mail.Port);
}
Verificați validitatea
Am menționat anterior că timpul de rulare se va plânge atunci când configurația este încărcată, iar unele date nu respectă regulile pe care le-ați configurat (de exemplu, în MailCenterConfiguration.cs). Tind să vreau să cunosc aceste lucruri cât mai curând posibil, când site-ul meu se declanșează. O modalitate de a rezolva aceasta este încărcarea configurației în _Global.asax.cx.Application_Start_, în cazul în care configurația este nevalidă, veți fi informat despre aceasta cu mijloacele unei excepții. Site-ul dvs. nu va porni, iar în loc să vi se prezinte informații detaliate despre excepție în Ecranul galben al morții .
Global.asax.cs
protected void Application_ Start(object sender, EventArgs e)
{
MailCenterConfiguration.Instance;
}