Uitbreidbaarheid van syndicatie
De Syndication-API is ontworpen om een indelingsneutraal programmeermodel te bieden waarmee gesyndiceerde inhoud in verschillende indelingen naar de draad kan worden geschreven. Het abstracte gegevensmodel bestaat uit de volgende klassen:
Deze klassen zijn nauw gekoppeld aan de constructies die zijn gedefinieerd in de Atom 1.0-specificatie, hoewel sommige van de namen verschillen.
Een belangrijke functie van syndicatieprotocollen is uitbreidbaarheid. Zowel Atom 1.0 als RSS 2.0 voegen kenmerken en elementen toe aan syndicatiefeeds die niet zijn gedefinieerd in de specificaties. Het WCF-model (Windows Communication Foundation) voor syndicatie biedt de volgende manieren om te werken met aangepaste kenmerken en extensies, losjes getypte toegang en het afleiden van een nieuwe klasse.
Losjes getypte toegang
Als u extensies toevoegt door een nieuwe klasse af te leiden, moet u extra code schrijven. Een andere optie is het openen van extensies op een losjes getypte manier. Alle typen die in het abstracte gegevensmodel voor syndicatie zijn gedefinieerd, bevatten eigenschappen met de naam AttributeExtensions
en ElementExtensions
(met één uitzondering SyndicationContent heeft een AttributeExtensions
eigenschap, maar geen ElementExtensions
eigenschap). Deze eigenschappen zijn verzamelingen extensies die niet door respectievelijk de TryParseAttribute
en TryParseElement
methoden worden verwerkt. U hebt toegang tot deze niet-verwerkte extensies door aan te roepen SyndicationElementExtensionCollection.ReadElementExtensions op de ElementExtensions
eigenschap van SyndicationFeed, SyndicationItem, SyndicationLink, , SyndicationPersonen SyndicationCategory. Met deze set methoden worden alle extensies met de opgegeven naam en naamruimte gevonden, worden ze afzonderlijk gedeserialiseerd in exemplaren van TExtension
en worden ze geretourneerd als een verzameling TExtension
objecten.
Een nieuwe klasse afleiden
U kunt een nieuwe klasse afleiden uit een van de bestaande abstracte gegevensmodelklassen. Doe dit wanneer u een toepassing implementeert waarin de meeste feeds waarmee u werkt, een bepaalde extensie hebben. In dit onderwerp bevatten de meeste feeds waarmee het programma werkt een MyExtension
extensie. Voer de volgende stappen uit om een verbeterde programmeerervaring te bieden:
Maak een klasse voor het opslaan van de extensiegegevens. In dit geval maakt u een klasse met de naam MyExtension.
Een klasse met de naam MyExtensionItem afleiden om SyndicationItem een eigenschap van het type MyExtension beschikbaar te maken voor programmeerbaarheidsdoeleinden.
Overschrijven TryParseElement(XmlReader, String) in de klasse MyExtensionItem om een nieuw Exemplaar van MyExtension te instantiëren wanneer een MyExtension wordt gelezen.
Overschrijven WriteElementExtensions(XmlWriter, String) in de klasse MyExtensionItem om de inhoud van de eigenschap MyExtension naar een XML-schrijver te schrijven.
Een klasse afleiden met de naam MyExtensionFeed van SyndicationFeed.
Overschrijven CreateItem() in de klasse MyExtensionFeed om een MyExtensionItem te instantiëren in plaats van de standaardwaarde SyndicationItem. Er wordt een reeks methoden gedefinieerd waarin SyndicationFeedSyndicationItem , en SyndicationPerson objecten (bijvoorbeeld CreateLink(), CreateCategory()en ) CreatePerson()kunnen worden gemaakt SyndicationLinkSyndicationCategory. Dit alles kan worden overschreven om een aangepaste afgeleide klasse te maken.