Extensibilidade de Sindicação
A API de distribuição foi projetada para fornecer um modelo de programação neutro em termos de formato que permite que o conteúdo sindicalizado seja gravado no fio em uma variedade de formatos. O modelo de dados abstrato consiste nas seguintes classes:
Essas classes são mapeadas de perto para as construções definidas na especificação Atom 1.0, embora alguns dos nomes sejam diferentes.
Uma característica fundamental dos protocolos de distribuição é a extensibilidade. Tanto o Atom 1.0 quanto o RSS 2.0 adicionam atributos e elementos aos feeds de distribuição que não estão definidos nas especificações. O modelo de programação de distribuição do Windows Communication Foundation (WCF) fornece as seguintes maneiras de trabalhar com atributos e extensões personalizados, acesso de tipo flexível e derivação de uma nova classe.
Acesso vagamente tipado
Adicionar extensões derivando uma nova classe requer escrever código adicional. Outra opção é acessar extensões de forma vaga. Todos os tipos definidos no modelo de dados abstratos de sindicação contêm propriedades nomeadas AttributeExtensions
e ElementExtensions
(com uma exceção, tem uma AttributeExtensions
propriedade, SyndicationContent mas nenhuma ElementExtensions
propriedade). Essas propriedades são coleções de extensões não processadas TryParseAttribute
pelos métodos e TryParseElement
respectivamente. Você pode acessar essas extensões não processadas chamando SyndicationElementExtensionCollection.ReadElementExtensions a ElementExtensions
propriedade de SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPersone 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 as retorna como uma coleção de TExtension
objetos.
Derivando uma nova classe
Você pode derivar uma nova classe de qualquer uma das classes de modelo de dados abstratos 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 trabalha contém uma MyExtension
extensão. Para fornecer uma experiência de programação aprimorada, execute as seguintes etapas:
Crie uma classe para armazenar os dados da extensão. Nesse caso, crie uma classe chamada MyExtension.
Derive uma classe chamada MyExtensionItem de para expor uma propriedade do tipo MyExtension para fins de SyndicationItem programação.
Substitua TryParseElement(XmlReader, String) na classe MyExtensionItem para instanciar uma nova instância MyExtension quando um MyExtension é lido.
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 padrão SyndicationItem. Uma série de métodos são definidos em SyndicationFeed e SyndicationItem que podem criar SyndicationLink, SyndicationCategory, e SyndicationPerson objetos (por exemplo, CreateLink(), CreateCategory(), e CreatePerson()). Tudo isso pode ser substituído para criar uma classe derivada personalizada.