Met behulp van attributen, kind config secties en beperkingen
Er is ook de mogelijkheid om attributen die automatisch zorgt voor de sanitair, alsmede het verschaffen van de mogelijkheid om eenvoudig beperkingen toe te voegen gebruiken.
Ik hier presenteren een voorbeeld van code Zelf gebruik ik in een van mijn sites. Met een beperking dicteren I de maximale hoeveelheid schijfruimte een gebruiker mag gebruiken.
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; }
}
}
}
Dit is opstelling in web.config zoals zo
<configSections>
<!-- Mailcenter configuration file -->
<section name="mailCenter" type="Ani.MailCenterConfiguration" requirePermission="false"/>
</configSections>
...
<mailCenter userDiskSpace="25000">
<mail
host="my.hostname.com"
port="366" />
</mailCenter>
Onderliggende elementen
Het kind xml element mail wordt gemaakt in het bestand dezelfde .cs als hierboven. Hier heb ik beperkingen op de haven toegevoegd. Als de poort geen waarde is toegekend in dit gebied de runtime klagen wanneer de configuratie wordt geladen.
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; }
}
Gebruik
Om gebruik het dan praktisch in de code, alles wat je hoeft te doen is instantiëren de MailCenterConfigurationObject, zal dit automatisch de relevante hoofdstukken uit 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);
}
Geldigheid te controleren
Ik al eerder gezegd dat de runtime zal klagen wanneer de configuratie is geladen en sommige gegevens niet voldoet aan de regels die u hebt ingesteld (bijvoorbeeld in MailCenterConfiguration.cs). Ik heb de neiging om te willen weten deze dingen zo snel mogelijk wanneer mijn site branden up. Een manier om dit op te lossen is het laden van de configuratie in _Global.asax.cx.Application_Start_, als de configuratie ongeldig is wordt u op de hoogte gesteld van de middelen van een uitzondering. Uw site zal niet starten en je in plaats daarvan zal worden gepresenteerd gedetailleerde uitzondering informatie in het Yellow screen of death .
Global.asax.cs
protected void Application_ Start(object sender, EventArgs e)
{
MailCenterConfiguration.Instance;
}