Verwendung von Attributen, untergeordneten Konfigurationsabschnitten und Constraints
Es besteht auch die Möglichkeit, Attribute zu verwenden, die sich automatisch um das Klempnerhandwerk kümmern und die Möglichkeit bieten, auf einfache Weise Einschränkungen hinzuzufügen.
Ich präsentiere hier ein Beispiel aus dem Code, den ich selbst auf einer meiner Websites verwende. Mit einer Einschränkung gebe ich die maximale Menge an Speicherplatz vor, die ein einzelner Benutzer verwenden darf.
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; }
}
}
}
Dies wird in der web.config wie folgt eingerichtet
<configSections>
<!-- Mailcenter configuration file -->
<section name="mailCenter" type="Ani.MailCenterConfiguration" requirePermission="false"/>
</configSections>
...
<mailCenter userDiskSpace="25000">
<mail
host="my.hostname.com"
port="366" />
</mailCenter>
Kindliche Elemente
Das untergeordnete Xml-Element E-Mail wird in der gleichen .cs-Datei wie die obige Datei erstellt. Hier habe ich Beschränkungen für den Anschluss hinzugefügt. Wenn dem Port ein Wert zugewiesen wird, der nicht in diesem Bereich liegt, beschwert sich die Laufzeit, wenn die Konfiguration geladen wird.
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; }
}
Verwenden Sie
Um es dann praktisch im Code zu verwenden, müssen Sie nur das MailCenterConfigurationObject instanziieren, das dann automatisch lesen Sie die entsprechenden Abschnitte aus der 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);
}
Prüfung auf Gültigkeit
Ich habe bereits erwähnt, dass sich die Laufzeitumgebung beschwert, wenn die Konfiguration geladen wird und einige Daten nicht den Regeln entsprechen, die Sie eingerichtet haben (z. B. in MailCenterConfiguration.cs). Ich neige dazu, diese Dinge so schnell wie möglich zu wissen, wenn meine Website gestartet wird. Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Konfiguration in _Global.asax.cx.Application_Start_ zu laden. Wenn die Konfiguration ungültig ist, werden Sie mit Hilfe einer Ausnahme darüber informiert. Ihre Website wird nicht gestartet und stattdessen werden Ihnen detaillierte Ausnahmeinformationen in der Gelber Bildschirm des Todes .
Global.asax.cs
protected void Application_ Start(object sender, EventArgs e)
{
MailCenterConfiguration.Instance;
}