Extensibilité de la syndication
L'API de syndication est conçue pour fournir un modèle de programmation neutre en ce qui concerne le format qui autorise l'écriture du contenu syndiqué sur le câble dans divers formats. Le modèle de données abstrait inclut les classes suivantes :
Ces classes mappent précisément aux constructions définies dans la spécification Atom 1.0, bien que certains noms soient différents.
L’une des fonctionnalités clés de protocoles de syndication est l’extensibilité. Atom 1.0 et RSS 2.0 ajoutent des attributs et des éléments aux flux de syndication des attributs et des éléments qui ne sont pas définis dans les spécifications. Le modèle de programmation de la syndication Windows Communication Foundation (WCF) offre les moyens suivants d’utiliser des attributs personnalisés et des extensions : la dérivation d’une nouvelle classe et l’accès peu typé.
Accès peu typé
L’ajout des extensions en dérivant une classe nouvelle requiert l’écriture de code supplémentaire. Une autre option accède aux extensions d’une manière peu typée. Tous les types définis dans le modèle de données abstraites de syndication contiennent des propriétés nommées AttributeExtensions
et ElementExtensions
(avec une exception, SyndicationContent possède une propriété AttributeExtensions
mais aucune propriété ElementExtensions
). Ces propriétés sont des collections d'extensions non traitées par les méthodes TryParseAttribute
et TryParseElement
, respectivement. Vous pouvez accéder à ces extensions non traitées en appelant SyndicationElementExtensionCollection.ReadElementExtensions sur la propriété ElementExtensions
de SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPerson et SyndicationCategory. Ce jeu de méthodes recherche toutes les extensions avec le nom et l'espace de noms spécifiés, les désérialise individuellement dans les instances de TExtension
et les retourne comme une collection d'objets TExtension
.
Dérivation d'une nouvelle classe
Vous pouvez dériver une classe nouvelle à partir des classes de modèle de données abstraites existantes. Procédez ainsi lors de l’implémentation d’une application dans laquelle la plupart des flux que vous utilisez ont une extension particulière. Dans cette rubrique, la plupart des flux que le programme utilise contiennent une extension MyExtension
. Pour fournir une expérience de programmation améliorée, procédez comme suit :
Créez une classe pour contenir les données d’extension. Dans ce cas, créez une classe appelée MyExtension.
Dérivez une classe appelée MyExtensionItem de SyndicationItem pour exposer une propriété de type MyExtension à des fins de programmabilité.
Substituez TryParseElement(XmlReader, String) dans la classe MyExtensionItem pour instancier une nouvelle instance MyExtension lorsqu'un MyExtension est lu.
Substituez WriteElementExtensions(XmlWriter, String) dans la classe MyExtensionItem pour écrire le contenu de la propriété MyExtension dans un enregistreur XML.
Dérivez une classe appelée MyExtensionFeed de SyndicationFeed.
Substituez CreateItem() dans la classe MyExtensionFeed pour instancier un MyExtensionItem au lieu du SyndicationItem par défaut. Une série de méthodes est définie dans SyndicationFeed et SyndicationItem qui peut créer des objets SyndicationLink, SyndicationCategory et SyndicationPerson (par exemple, CreateLink(), CreateCategory()et CreatePerson()). Toutes ces méthodes peuvent être substituées pour créer une classe dérivée personnalisée.