Estendibilità della diffusione
L'API di diffusione è progettata per fornire un modello di programmazione di formato neutro che consente di scrivere in rete il contenuto diffuso in molteplici formati. Il modello di dati astratto è costituito dalle classi seguenti:
Queste classi eseguono il mapping in modo rigoroso ai costrutti definiti nella specifica Atom 1.0, anche se alcuni dei nomi sono diversi.
Una funzionalità chiave dei protocolli di diffusione è l'estendibilità. Sia Atom 1.0 che RSS 2.0 aggiungono attributi ed elementi ai feed di diffusione che non sono definiti nelle specifiche. Il modello di programmazione della diffusione Windows Communication Foundation (WCF) offre le modalità seguenti di utilizzare attributi personalizzati ed estensioni, accesso non fortemente tipizzato e derivazione di una nuova classe.
Accesso non fortemente tipizzato
L'aggiunta di estensioni tramite la derivazione di una nuova classe richiede che venga scritto codice aggiuntivo. Un'altra opzione consiste nell'accedere alle estensioni in modo non fortemente tipizzato. Tutti i tipi definiti nel modello di dati astratto di diffusione contengono le proprietà denominate AttributeExtensions e ElementExtensions (con un'eccezione, SyndicationContent ha una proprietà AttributeExtensions ma nessuna proprietà ElementExtensions). Queste proprietà sono raccolte di estensioni non elaborate rispettivamente dai metodi TryParseAttribute e TryParseElement. È possibile accedere a queste estensioni non elaborate chiamando System.ServiceModel.Syndication.SyndicationElementExtensionCollection.ReadElementExtensions.String,System.String) sulla proprietà ElementExtensions di SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPerson e SyndicationCategory. Questo set di metodi cerca tutte le estensioni con il nome e lo spazio dei nomi specificati, le deserializza singolarmente in istanze di TExtension e le restituisce come una raccolta di oggetti TExtension.
Derivazione di una nuova classe
È possibile derivare una nuova classe da qualsiasi classe di modello di dati astratto esistente. Adottare questo approccio quando si implementa un'applicazione in cui la maggior parte dei feed utilizzati ha un'estensione particolare. In questo argomento, la maggior parte dei feed utilizzati dal programma contiene un'estensione MyExtension. Per offrire una migliore esperienza di programmazione, eseguire le operazioni seguenti:
Creare una classe in cui possano essere contenuti i dati dell'estensione. In questo caso, creare una classe chiamata MyExtension.
Derivare una classe chiamata MyExtensionItem da SyndicationItem per esporre una proprietà di tipo MyExtension a fini di programmabilità.
Eseguire l'override di TryParseElement nella classe MyExtensionItem per creare l'istanza di una nuova istanza MyExtension quando viene letta una MyExtension.
Eseguire l'override di WriteElementExtensions nella classe MyExtensionItem per scrivere il contenuto della proprietà MyExtension in un writer XML.
Derivare una classe chiamata MyExtensionFeed da SyndicationFeed.
Eseguire l'override di CreateItem nella classe MyExtensionFeed per creare l'istanza di un MyExtensionItem anziché del SyndicationItem predefinito. In SyndicationFeed e SyndicationItem è definita una serie di metodi in grado di creare oggetti SyndicationLink, SyndicationCategory e SyndicationPerson (ad esempio, CreateLink, CreateCategory e CreatePerson). Tutti possono essere sottoposti a override per creare una classe derivata personalizzata.