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.
Ein Hauptmerkmal 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 Windows Communication Foundation (WCF)-Programmiermodell für Syndication bietet die folgenden Möglichkeiten, mit benutzerdefinierten Attributen und Erweiterungen zu arbeiten: den Zugriff mit flexibler Typbindung und das Ableiten 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 System.ServiceModel.Syndication.SyndicationElementExtensionCollection.ReadElementExtensions.String,System.String) 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 in der MyExtensionItem-Klasse, um eine neue MyExtension-Instanz zu instanziieren, wenn MyExtension eingelesen wird.
Überschreiben Sie WriteElementExtensions 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.