Extensibilidade de sindicalização
A API de sindicalização foi projetada para fornecer um modelo de programação neutro em formato que permite que o conteúdo sindicalizado seja gravado na transmissão em uma variedade de formatos. O modelo de dados abstrato consiste nas seguintes classes:
Essas classes mapeiam de perto os constructos definidos na especificação Atom 1.0, embora alguns dos nomes sejam diferentes.
Um dos principais recursos dos protocolos de sindicalização é a extensibilidade. Atom 1.0 e RSS 2.0 adicionam atributos e elementos a feeds de sindicalização que não estão definidos nas especificações. O modelo de programação de sindicalização do Windows Communication Foundation (WCF) fornece as seguintes maneiras de trabalhar com atributos e extensões personalizados, acesso com tipo flexível e derivar uma nova classe.
Acesso com tipo flexível
Adicionar extensões derivando uma nova classe requer a gravação de código adicional. Outra opção é acessar extensões usando tipo flexível. Todos os tipos definidos no modelo de dados abstrato de sindicalização contêm propriedades nomeadas AttributeExtensions
e ElementExtensions
(com uma exceção, SyndicationContent tem uma propriedade AttributeExtensions
, mas nenhuma propriedade ElementExtensions
). Essas propriedades são coleções de extensões não processadas pelos métodos TryParseAttribute
e TryParseElement
, respectivamente. Você pode acessar essas extensões não processadas chamando SyndicationElementExtensionCollection.ReadElementExtensions na propriedade ElementExtensions
de SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPerson e SyndicationCategory. Esse conjunto de métodos localiza todas as extensões com o nome e o namespace especificados, desserializa-as individualmente em instâncias de TExtension
e retorna-as como uma coleção de objetos TExtension
.
Criando uma nova classe
Você pode derivar uma nova classe de qualquer uma das classes de modelo de dados abstrato existentes. Faça isso ao implementar um aplicativo no qual a maioria dos feeds com os quais você está trabalhando tem uma extensão específica. Neste tópico, a maioria dos feeds com os quais o programa funciona contêm uma extensão MyExtension
. Para proporcionar uma experiência de programação aprimorada, execute as seguintes etapas:
Crie uma classe para armazenar os dados de extensão. Nesse caso, crie uma classe chamada MyExtension.
Derive uma classe chamada MyExtensionItem de SyndicationItem para expor uma propriedade do tipo MyExtension para fins de programação.
Substitua TryParseElement(XmlReader, String) na classe MyExtensionItem para instanciar uma nova instância MyExtension quando uma MyExtension é lida.
Substitua WriteElementExtensions(XmlWriter, String) na classe MyExtensionItem para gravar o conteúdo da propriedade MyExtension em um gravador XML.
Derive uma classe chamada MyExtensionFeed de SyndicationFeed.
Substitua CreateItem() na classe MyExtensionFeed para instanciar um MyExtensionItem em vez do SyndicationItem padrão. Uma série de métodos são definidos em SyndicationFeed e SyndicationItem que podem criar objetos SyndicationLink, SyndicationCategory e SyndicationPerson (por exemplo, CreateLink(), CreateCategory() e CreatePerson()). Tudo isso pode ser substituído para criar uma classe derivada personalizada.