Wie Hinzufügen Einstellungen Benutzerdefinierte Konfiguration für eine (ASP)

Seit seiner Veröffentlichung, ASP.NET-Anwendungen und Komponenten in die Datei web.config sahen sie müssen alle Einstellungen zu laden, funktionieren. Allerdings, Flexibilität und Robustheit zu einer Anwendung oder Komponente hinzuzufügen benutzerdefinierte Einstellungen hinzuzufügen, ist nicht so einfach wie die meisten mögen. Dieser Artikel zeigt Ihnen, wie die notwendigen Klassen schreiben XML-Konfigurationselemente zu handhaben und die Einstellungen verwenden sie im Code enthalten.







Das Framework bietet eine Vielzahl von Einstellungen, die innerhalb web.config konfiguriert werden können, um das Verhalten von einem oder mehreren Einbauten innerhalb der Anwendung zu modifizieren. Für einige Entwickler, mit den Einstellungen, die von .NET Framework allein kleben ausreichend. Aber viele mehr Entwickler finden sie eine breitere Reihe von Einstellungen steuern müssen - entweder für Komponenten (geschrieben von sich oder einem Dritten) oder einfach eine Reihe von Werten finden sie sich während ihrer Anwendung.

Die Datei web.config ermöglicht es Ihnen, benutzerdefinierte Einstellungen mit der einzustellen Element, aber es erlaubt nichts anderes als einfaches Schlüssel / Wert-Paare. Das folgende XML-Element ist ein Beispiel für eine Einstellung darin enthaltenen :

Schlüssel / Wert-Einstellungen können sicherlich hilfreich sein, in vielen Fällen aber Einstellungen sind einfach nicht flexibel genug, um für eine robuste oder komplexe Komponenten oder Einstellungen.

Zum Glück ermöglicht Microsoft Entwickler Klassen zu schreiben, die programmatischen Zugriff auf benutzerdefinierte Konfigurationseinstellungen innerhalb web.config enthalten hinzufügen.

Der Konfigurationsabschnitt

Ein Konfigurationsabschnitt aller erforderlichen Einstellungen nicht innerhalb der enthaltenen Element. So ist es eine gute Idee, um die XML-Struktur Ihrer Konfigurationseinstellungen zu entwerfen, bevor Sie Code zu schreiben.

Die Konfiguration als ein Beispiel in dieser Übung verwendet wird, ist eine Komponente, die RSS-Feeds oder Atom abruft. Es macht keinen Parsing tun, als das sprengt den Rahmen dieses Tutorials ist. Statt hart, um die Liste der Feeds Codierung abzurufen, sieht die Komponente seiner Konfiguration die Namen und URLs der RSS-Feeds enthalten abzurufen. Die Komponente wird FeedRetriever genannt, und die gewünschte XML-Struktur seiner Konfiguration sieht wie folgt aus:

Diese Elemente verwenden den Namen, URL, und Cache-Attribute für jeden Feed bestimmte Einstellungen festlegen. Natürlich sind die Namen und die URL Attribute erforderlich, aber das Cache-Attribut ist nicht und soll als wahr Standard.

Die obige Konfiguration ist einfach. Das Element modifiziert werden könnte, ein weiteres Kind zu enthalten, die so genannte , enthalten Einstellungen, die für alle Feeds gelten würde. Das Elemente auch zusätzliche Attribute, wie Cachetime und requestFrequency, zu steuern, wie lange ein Feed zwischengespeichert wird und wie oft ist es erforderlich, von dem Remote-Host nutzen könnten. Die einzige Grenze für die Erweiterbarkeit und Konfigurierbarkeit ist Ihre Vorstellungskraft.

Das Schreiben der Konfigurations Handler

Klassen basierend auf Configuration repräsentieren einzelne Elemente; es ist der Baustein eines Konfigurationsabschnitt. Typen, die aus Configuration ableiten einfach darstellen Elemente, die mehr als eine Art von Element enthalten. Von der Konfiguration oben aufgeführten die Element wird durch eine Klasse repräsentiert, die von Configuration ableitet, und die Elemente werden durch eine Configurationbasierten Klasse dargestellt.

Stellvertretend für die Element

Sie werden mit dem Start Element, indem sie es mit einer Klasse genannt FeedElement (abgeleitet von Configuration) darstellt. Diese Klasse und zukünftige konfigurationsbezogene Klassen befinden sich in der FeedRetriever.Configuration Namespace.

Jedes Configurationelement-Objekt fungiert als Indexer für seine interne Sammlung von Immobilien-Werte. Es ist diese innere Sammlung, zusammen mit .NET Attributen, die Ihnen die zur Karte ermöglicht Element Attribute zu den Eigenschaften der FeedElement Klasse.

Der folgende Code ist der vollständige Code für die FeedElement Klasse:

Die Configuration Klasse dient als Indexer zu einer darunter liegenden Sammlung von Konfigurationseigenschaften (daher die Indexer Notation dieses [keyValue]). Durch die Verwendung der dieses Schlüsselwort und den Zugriff auf die zugrunde liegenden Immobilie mit einem String-Taste können Sie den Wert der Eigenschaft erhalten und einstellen, ohne ein eigenes Feld, um diese Daten zu enthalten. Die zugrunde liegende Immobilie Sammlung speichert Daten als Typ Object; Daher müssen Sie den Wert als den entsprechenden Typ umwandeln, wenn Sie mit ihm etwas tun wollen.

Es gibt zwei mögliche Abhilfen für dieses Problem. Der erste Ansatz ändert den regulären Ausdruck leere Saiten zu ermöglichen. Der zweite Ansatz weist auf die Eigenschaft einen Standardwert. Es spielt keine Rolle dieser besonderen Fall in. Selbst bei einem Standardwert ist das URL-Attribut noch ein erforderliches Attribut in der Element - die Anwendung wirft einen Configuration wenn ein Element keine URL-Attribut haben.







Es gibt mehrere andere Validator Attribute im System.Configuration Namespace Daten zu Eigenschaften zugewiesen zu validieren und die XML-Attribute die in der Umgebung. Die folgende Liste zeigt alle der Validator Attribute innerhalb des System.Configuration Namespace:

  • CallbackValidatorAttribute - Stellt eine Verbindung zwischen einem CallbackValidator Objekt und dem Code zu validieren - erlaubt
    dynamische Validierung für einen Konfigurationswert.
  • IntegerValidatorAttribute - Test prüft unter Verwendung eines IntegerValidator Objekt zu bestimmen, ob der Konfigurationswert innerhalb oder außerhalb eines bestimmten Bereichs fällt.
  • LongValidatorAttribute - Test prüft unter Verwendung eines LongValidator Objekt zu bestimmen, ob der Konfigurationswert innerhalb oder außerhalb eines bestimmten Bereichs fällt.
  • PositiveTimeSpanValidatorAttribute - Dieser Test prüft mit einem PositiveTimeSpanValidator Objekt für positiven Span Konfigurationswerte.
  • RegexStringValidatorAttribute - Test prüft unter Verwendung eines RegexStringValidator Objekt zu bestimmen, ob der Konfigurationswert auf den regulären Ausdruck haftet.
  • StringValidatorAttribute - Dieser Test prüft mit einem StringValidator Objekt der Konfigurationswert bestimmte Kriterien erfüllt, um sicherzustellen, - wie String-Länge und ungültige Zeichen.
  • SubclassTypeValidatorAttribute - Test prüft unter Verwendung eines SubclassTypeValidator Objekts zu bestimmen, ob der Konfigurationswert einer gegebenen Art ableitet.
  • TimeSpanValidatorAttribute - die Überprüfung eines Objekts mit TimeSpanValidator zu bestimmen, ob der Konfigurationswert fällt innerhalb oder außerhalb eines bestimmten Bereichs.

Mit Ausnahme der CallbackValidatorAttribute, Sie haben keine entsprechende Validierer-Objekte erstellen in Verbindung mit den Validator Attribute zu verwenden. Die .NET-Laufzeit erstellt die entsprechenden Validator Objekte für Sie, und die Attribute enthalten die benötigten Parameter die Validator-Objekte zu konfigurieren.

Dieses kleine Stück Code ist alles, was erforderlich ist, programmatisch einzelne darzustellen Elemente. Der nächste Schritt ist es, eine Klasse zu schreiben, die darstellt, Element.

Schreiben einer Elementsammlung Klasse

Die XML-Darstellung der Element ist, dass aus einer Sammlung von Speiseelementen. Ebenso ist die Darstellung der programmatische Element ist eine Sammlung von Objekten FeedElement. Diese Klasse, die so genannte FeedElementCollection, leitet sich von der abstrakten Klasse Configuration.

  • CreateNewElement () - Erstellt ein neues Configurationelement-Objekt (FeedElement in diesem
    Fall).
  • GetElementKey () - Liefert den Elementschlüssel für ein bestimmtes Konfigurationselement (das
    Name-Eigenschaft von FeedElement Objekten in diesem Fall).

Mit dem im Verstand, in den vollständigen Code für die FeedElementCollection Klasse unter:

  • AddItemName - Legt den Namen des Konfigurationselement. Beispielsweise,
    Setze diese als „Futter“ erfordern würde, die Elemente in der
    Konfiguration geändert werden, um .
  • ClearItemsName - Legt den Namen des Konfigurationselement (gebraucht
    alle Elemente aus der Sammlung löschen).
  • RemoveItemName - Legt den Namen für die Konfigurationselement (gebraucht
    ein Element aus der Sammlung) zu entfernen.

Werden diese benannte Parameter leer Vorgaben sie , , .

Das Schreiben der FeedRetreiverSection Klasse

Die letzte Klasse, die so genannte FeedRetrieverSection, leitet sich von Configuration und stellt die Element. Dies ist die einfachste Klasse der Konfigurationsklassen, wie die einzige Anforderung es erfüllen muss, ist programmatisch Zugriff auf die zur Verfügung zu stellen Element (die FeedElementCollection).

Ändern web.config

Mit der Konfiguration Handler abgeschlossen ist, können Sie die entsprechenden Elemente zu web.config hinzufügen. Das Abschnitt kann überall in der Datei gehen, solange es ein direkter Nachkomme des Stammelements ist (die Element). Anordnen innerhalb einer anderen Konfiguration Abschnitt führt zu einem Fehler.

  • Name - Der Name des Konfigurationsabschnittselement. In diesem Fall ist der Name feedRetriever.
  • Typ - Der qualifizierte Name der Klasse mit dem Abschnitt verbunden ist, und, falls erforderlich,
    der Name der Assembly die Klasse befindet sich in. In diesem Fall ist der qualifizierte Name
    FeedRetriever.Configuration.FeedRetrieverSection ist. Wenn es befindet sich in einem separaten
    Anordnung würde das type-Attribut einen Wert von „FeedRetriever.Configuration.FeedRetrieverSection hat,
    ", woher ist der Name der Versammlung
    ohne die spitzen Klammern.

Jetzt ist Ihre Anwendung ordnungsgemäß innerhalb der enthaltenen verwenden, um die FeedRetrieverSection, FeedElementCollection und FeedElement Klassen konfiguriert Sie programmatischen Zugriff auf die benutzerdefinierten Einstellungen zu gewähren Konfigurationsabschnitt in web.config. So, wie Sie Zugriff auf diese Einstellungen aus dem Code?

Zugriff auf Konfigurationsdaten von-Code

Der System.Configuration Namespace enthält eine statische Klasse namens Konfigurationsmanager. Wenn Sie die Abschnitt Ihre Verbindungszeichenfolgen zu beherbergen, sind Sie zumindest vertraut mit Konfigurationsmanager. Es hat ein Verfahren genannt GetSection (), die einen String mit den Namen der Konfigurationsabschnitt akzeptiert abzurufen. Der folgende Code zeigt dies (unter der Annahme mit System.Configuration an der Spitze der Codedatei ist):

Die GetSection () Methode gibt einen Wert vom Typ Objekt, so muß sie gegossen wird, unabhängig von der Art des Handler für diesen Abschnitt ist. Dieser Code ruft den Abschnitt mit dem Namen feedRetriever und wirft das Ergebnis als FeedRetrieverSection. Sobald Sie das Objekt haben, können Sie die Konfigurationsdaten zugreifen programmatisch starten.

Um Ihnen eine Vorstellung davon, wie die Konfigurationseinstellungen können in Ihrer Komponente oder Anwendung verwendet werden, der folgende Code ist eine sehr einfache Implementierung der FeedRetriever Komponente.

Sobald Sie den Abschnittshandler mit GetSection () abrufen, haben Sie vollen Zugriff auf Objekte aus Ihren Handler-Klassen erstellt. Die erste Zeile der GetFeeds () ist eine für jede Schleife, die durch alle FeedElement Objekte enthalten sind, mit dem Objekt FeedElementCollection Schleifen durch die Beschickungen Eigenschaft zurückgegeben. Dies ermöglicht Ihnen den direkten Zugriff auf diese FeedElement Objekte - macht es einfach, jeden Feed Name, URL für den Zugriff auf und die Cache-Einstellungen.

Während jeder Iteration der Schleife macht es das Verfahren eine Anfrage der URL-Eigenschaft FeedElement Objekts verwenden. Wenn die Anforderung führt zu einem Erfolg werden die Feed-Daten abgerufen und in den Variablen gespeichert feeddata. Dann prüft der Code des Cache-Eigenschaft des FeedElement Objekts zu bestimmen, ob das Futter cachen. die den Feed Das Caching beinhaltet einen Dateinamen konstruieren, indem Sie die Namenseigenschaft des FeedElement Objekt und das aktuelle Datum und die Uhrzeit. Dann wird ein Streamwriter-Objekt erstellt die Datei und schreibt die Feed-Daten zu.

Wie Sie sehen können, ist die Konfigurationsabschnitt mit Handler-Klassen Schlüssel zum Abrufen und benutzerdefinierten Einstellungen in web.config wohnen. Es erfordert sicherlich mehr Zeit und Aufwand für Sie, aber es macht auf jeden Fall Ihre Anwendung oder Komponente viel einfacher für sich selbst und andere Entwickler zu konfigurieren.

  • Folge uns auf Twitter. oder abonnieren Sie den Nettuts + RSS-Feed für die besten Web-Entwicklung Tutorials im Internet.






In Verbindung stehende Artikel