Syndication-Erweiterbarkeit
Die Syndication-API ist darauf ausgelegt, ein formatunabhängiges Programmiermodell bereitzustellen, mit dem Fremdinhalte in verschiedenen Formaten ausgegeben und direkt übertragen werden können. Das abstrakte Datenmodell besteht aus den folgenden Klassen:
Diese Klassen sind nahezu deckungsgleich mit den in der Atom 1.0-Spezifikation definierten Konstrukten, obwohl manche der Namen anders lauten.
Eine Hauptfunktion von Syndication-Protokollen ist die Erweiterbarkeit. Sowohl Atom 1.0 als auch RSS 2.0 lassen zu, dass Sie Syndication-Feeds Attribute und Elemente hinzufügen, die nicht in den Spezifikationen definiert sind. Das Syndikationsprogrammiermodell der Windows Communication Foundation (WCF) bietet die folgenden Möglichkeiten für die Arbeit mit benutzerdefinierten Attributen und Erweiterungen, den lose getypten Zugriff und die Ableitung einer neuen Klasse.
Zugriff mit flexibler Typbindung
Wenn Erweiterungen durch das Ableiten einer neuen Klasse hinzugefügt werden sollen, muss zusätzlicher Code geschrieben werden. Eine andere Möglichkeit besteht darin, mit flexibler Typbindung auf Erweiterungen zuzugreifen. Alle im abstrakten Datenmodell für Syndication definierten Typen enthalten Eigenschaften namens AttributeExtensions
und ElementExtensions
(mit einer Ausnahme, SyndicationContent verfügt über die AttributeExtensions
-Eigenschaft, nicht aber über die ElementExtensions
-Eigenschaft). Diese Eigenschaften sind Auflistungen von Erweiterungen, die nicht von der TryParseAttribute
-Methode bzw. der TryParseElement
-Methode verarbeitet werden. Sie können auf diese unverarbeiteten Erweiterungen zugreifen, indem Sie SyndicationElementExtensionCollection.ReadElementExtensions für die ElementExtensions
-Eigenschaft von SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPerson und SyndicationCategory aufrufen. Dieser Satz von Methoden findet alle Erweiterungen mit dem angegebenen Namen und Namespace, deserialisiert sie einzeln in Instanzen von TExtension
und gibt sie als Auflistung von TExtension
-Objekten zurück.
Ableiten einer neuen Klasse
Sie können eine neue Klasse von jeder im abstrakten Datenmodell vorhandenen Klasse ableiten. Tun Sie dies beim Implementieren einer Anwendung, in der Sie für die meisten Feeds eine bestimmte Erweiterung verwenden. In diesem Thema enthalten die meisten der Feeds, mit denen das Programm arbeitet, eine MyExtension
-Erweiterung. Um Ihre Programmiererfahrung zu vertiefen, führen Sie die folgenden Schritte aus:
Erstellen Sie eine Klasse zum Speichern der Erweiterungsdaten. Erstellen Sie in diesem Fall eine Klasse mit dem Namen MyExtension.
Leiten Sie eine Klasse mit dem Namen MyExtensionItem von SyndicationItem ab, um zu Programmierzwecken eine Eigenschaft des Typs MyExtension verfügbar zu machen.
Überschreiben Sie TryParseElement(XmlReader, String) in der MyExtensionItem-Klasse, um eine neue MyExtension-Instanz zu instanziieren, wenn MyExtension eingelesen wird.
Überschreiben Sie WriteElementExtensions(XmlWriter, String) in der MyExtensionItem-Klasse, um den Inhalt der MyExtension-Eigenschaft an einen XML-Writer auszugeben.
Leiten Sie eine Klasse mit dem Namen MyExtensionFeed von SyndicationFeed ab.
Überschreiben Sie CreateItem() in der MyExtensionFeed-Klasse, um ein MyExtensionItem-Objekt statt des Standardobjekts vom Typ SyndicationItem zu instanziieren. In SyndicationFeed und SyndicationItem sind einige Methoden definiert, mit denen sich Objekte des Typs SyndicationLink, SyndicationCategory und SyndicationPerson erstellen lassen (beispielsweise CreateLink(), CreateCategory() und CreatePerson()). Alle diese Methoden können zur Erstellung einer benutzerdefinierten abgeleiteten Klasse überschrieben werden.