Extensibilidad de la distribución
La API de distribución está diseñada para proporcionar un modelo de programación neutral frente al formato que permita escribir el contenido distribuido en la conexión en una variedad de formatos. El modelo de datos abstracto está compuesto por las siguientes clases:
Estas clases asignan estrechamente a las estructuras definidas en la especificación Atom 1.0, aunque algunos de los nombres son diferentes.
Una característica clave de los protocolos de distribución es la extensibilidad. Atom 1.0 y RSS 2.0 agregan atributos y elementos a las fuentes de distribución que no están definidas en las especificaciones. El modelo de programación de redifusión de Windows Communication Foundation (WCF) proporciona las siguientes maneras de trabajar con atributos y extensiones personalizados, con el acceso escrito de forma imprecisa y de derivar una nueva clase.
Access escrito de manera imprecisa
Para agregar extensiones derivando una nueva clase, es necesario escribir código adicional. Otra opción obtener acceso a extensiones de manera imprecisa. Todos los tipos definidos en el modelo de datos abstracto de distribución contienen propiedades denominadas AttributeExtensions
y ElementExtensions
(con una excepción, SyndicationContent tiene una propiedad AttributeExtensions
pero ninguna propiedad ElementExtensions
). Estas propiedades son colecciones de extensiones no procesadas por los métodos TryParseAttribute
y TryParseElement
, respectivamente. Puede tener acceso a estas extensiones no procesadas llamando al método SyndicationElementExtensionCollection.ReadElementExtensions de la propiedad ElementExtensions
de SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPersony SyndicationCategory. Este conjunto de métodos encuentra todas las extensiones con el nombre y espacio de nombres especificado, las deserializa individualmente en instancias de TExtension
y las devuelve como una colección de objetos TExtension
.
Derivación de una nueva clase
Puede derivar una nueva clase de cualquiera de las clases del modelo de datos abstracto existentes. Haga esto al implementar una aplicación en la que la mayoría de las fuentes con las que está trabajando tienen una extensión determinada. En este tema, la mayoría de las fuentes con las que el programa trabaja contienen una extensión MyExtension
. Para proporcionar una experiencia de programación mejorada, realice los siguientes pasos:
Cree una clase para retener los datos de las extensión. En este caso, cree una clase llamada MyExtension.
Derive una clase llamada MyExtensionItem desde SyndicationItem para exponer una propiedad de tipo MyExtension a efectos de la capacidad de programación.
Invalide TryParseElement(XmlReader, String) en la clase MyExtensionItem para crear instancias de una nueva instancia de MyExtension cuando se lee una MyExtension.
Invalide WriteElementExtensions(XmlWriter, String) en la clase MyExtensionItem para escribir el contenido de la propiedad MyExtension en un sistema de escritura de XML.
Derive una clase llamada MyExtensionFeed desde SyndicationFeed.
Invalide CreateItem() en la clase MyExtensionFeed para crear instancias de MyExtensionItem en lugar del SyndicationItempredeterminado. Una serie de métodos se define en SyndicationFeed y SyndicationItem que pueden crear SyndicationLink, SyndicationCategoryy objetos SyndicationPerson (por ejemplo, CreateLink(), CreateCategory()y CreatePerson()). Todos los cuales se puede invalidar para crear una clase derivada personalizada.