Rozszerzalność syndykacji
Interfejs API syndykacji został zaprojektowany w celu zapewnienia modelu programowania neutralnego od formatu, który umożliwia zapisywanie zawartości syndykacyjnej w przewodach w różnych formatach. Model abstrakcyjnych danych składa się z następujących klas:
Te klasy są ściśle mapowane na konstrukcje zdefiniowane w specyfikacji Atom 1.0, chociaż niektóre nazwy są różne.
Kluczową cechą protokołów syndykacji jest rozszerzalność. Zarówno Atom 1.0, jak i RSS 2.0, dodają atrybuty i elementy do źródeł danych syndykacji, które nie są zdefiniowane w specyfikacji. Model programowania syndykacji programu Windows Communication Foundation (WCF) zapewnia następujące sposoby pracy z atrybutami niestandardowymi i rozszerzeniami, luźno wpisanym dostępem i wyprowadzeniem nowej klasy.
Luźno wpisany dostęp
Dodanie rozszerzeń przez wyprowadzenie nowej klasy wymaga pisania dodatkowego kodu. Inną opcją jest uzyskiwanie dostępu do rozszerzeń w sposób luźno wpisany. Wszystkie typy zdefiniowane w modelu danych abstrakcyjnych syndykacji zawierają właściwości o nazwie AttributeExtensions
i ElementExtensions
(z jednym wyjątkiem ma AttributeExtensions
właściwość, SyndicationContent ale nie ma ElementExtensions
właściwości). Te właściwości to kolekcje rozszerzeń, które nie są przetwarzane odpowiednio przez TryParseAttribute
metody i TryParseElement
. Dostęp do tych nieprzetworzonych rozszerzeń można uzyskać, wywołując SyndicationElementExtensionCollection.ReadElementExtensions właściwość , , SyndicationItem, SyndicationPersonSyndicationLinki SyndicationCategory.SyndicationFeedElementExtensions
Ten zestaw metod znajduje wszystkie rozszerzenia o określonej nazwie i przestrzeni nazw, deserializuje je indywidualnie w wystąpieniach TExtension
i zwraca je jako kolekcję TExtension
obiektów.
Wyprowadzanie nowej klasy
Możesz utworzyć nową klasę z dowolnej z istniejących abstrakcyjnych klas modelu danych. Należy to zrobić podczas implementowania aplikacji, w której większość kanałów informacyjnych, z którymi pracujesz, ma określone rozszerzenie. W tym temacie większość kanałów informacyjnych, z którymi program współpracuje, zawiera MyExtension
rozszerzenie. Aby zapewnić ulepszone środowisko programowania, wykonaj następujące czynności:
Utwórz klasę do przechowywania danych rozszerzenia. W tym przypadku utwórz klasę o nazwie MyExtension.
Utwórz klasę o nazwie MyExtensionItem z SyndicationItem , aby uwidocznić właściwość typu MyExtension dla celów programistycznych.
Zastąpij TryParseElement(XmlReader, String) w klasie MyExtensionItem, aby utworzyć wystąpienie nowego wystąpienia programu MyExtension po odczytaniu rozszerzenia MyExtension.
Zastąpij WriteElementExtensions(XmlWriter, String) w klasie MyExtensionItem, aby zapisać zawartość właściwości MyExtension w składniku zapisywania XML.
Utwórz klasę o nazwie MyExtensionFeed z SyndicationFeedklasy .
Zastąpuj CreateItem() klasę MyExtensionFeed, aby utworzyć wystąpienie elementu MyExtensionItem zamiast domyślnego SyndicationItemelementu . Zdefiniowano SyndicationFeed szereg metod , SyndicationItem które mogą tworzyć SyndicationLinkobiekty , SyndicationCategorySyndicationPerson i (na przykład CreateLink(), , CreateCategory()i CreatePerson()). Wszystkie te elementy można zastąpić, aby utworzyć niestandardową klasę pochodną.