Contextos de servicio disponibles para los convertidores de tipos y las extensiones de marcadoService Contexts Available to Type Converters and Markup Extensions

Los autores de los tipos que admiten los usos de la extensión de marcado y el convertidor de tipos deben tener a menudo la información contextual sobre dónde se encuentra un uso en el marcado o en la estructura gráfica del objeto adyacente.Authors of the types that support type converter and markup extension usages must often have contextual information about where a usage is located in the markup, or in surrounding object graph structure. Puede ser necesaria cierta información para que se cree una instancia correcta del objeto proporcionado o para que puedan crearse referencias a objetos existentes del gráfico del objeto.Information might be needed so that the provided object is instantiated correctly or so that object references to existing objects in the object graph can be made. Al usar los servicios XAML de .NET Framework, el contexto que puede ser necesario se expone como una serie de interfaces de servicio.When using .NET Framework XAML Services, the context that might be required is exposed as a series of service interfaces. El código de soporte de la extensión de marcado o el convertidor de tipos puede consultar un servicio usando un contexto de proveedor de servicio que esté disponible y se haya pasado desde XamlObjectWriter o tipos relacionados.Type converter or markup extension support code can query for a service by using a service provider context that is available and passed through from XamlObjectWriter or related types. El contexto de esquema XAML está disponible directamente con uno de estos servicios.The XAML schema context is directly available through one such service. En este tema se describe cómo acceder a los contextos de servicio desde una implementación de convertidor de valor y se enumeran los servicios normalmente disponibles y sus funciones.This topic describes how to access service contexts from a value converter implementation, and lists typically available services and their roles.

Obtener serviciosObtaining Services

Como implementador de un convertidor de valores, suele necesitar acceder a algún tipo de contexto en el que se aplica el convertidor de valores.As an implementer of a value converter, you often need access to some type of context in which the value converter is applied. Este contexto puede incluir información como el contexto de esquema XAML activo, acceso al sistema de asignación de tipos que proporcionan el contexto de esquema XAML y el escritor de objetos XAML, etc.This context might include information such as the active XAML schema context, access to the type mapping system that the XAML schema context and XAML object writer provide, and so on. Los servicios disponibles para una implementación de convertidor de tipos o extensión de marcado se comunican con los parámetros de contexto que forman parte de la firma de cada método virtual.The services available for a markup extension or type converter implementation are communicated through the context parameters that are part of the signature of each virtual method. En todos los casos, IServiceProvider debe estar implementado en el contexto y puede llamar a IServiceProvider.GetService para pedir un servicio.In every case, you have IServiceProvider implemented in the context, and can call IServiceProvider.GetService to request a service.

Servicios para una extensión de marcadoServices for a Markup Extension

MarkupExtension solo tiene un método virtual, ProvideValue.MarkupExtension has only one virtual method, ProvideValue. El parámetro de entrada serviceProvider indica cómo se comunican los servicios a las implementaciones cuando un procesador XAML llama a la extensión de marcado.The input serviceProvider parameter is how the services are communicated to implementations when the markup extension is called by a XAML processor. En el siguiente pseudocódigo se muestra cómo una implementación de extensión de marcado puede consultar los servicios en su ProvideValue:The following pseudocode illustrates how a markup extension implementation might query for services in its ProvideValue:

public override object ProvideValue(IServiceProvider serviceProvider)  
{  
...  
    // Get the IXamlTypeResolver from the service provider  
    if (serviceProvider == null)  
    {  
        throw new ArgumentNullException("serviceProvider");  
    }  
    IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;  
    if (xamlTypeResolver == null)  
   {  
        throw new ArgumentException("IXamlTypeResolver"));  
    }  
...  
}  

Servicios para un convertidor de tiposServices for a Type Converter

TypeConverter tiene cuatro métodos virtuales que usan un contexto de servicio y que admiten usos XAML.TypeConverter has four virtual methods that use a service context and that support XAML usages. Cada uno de estos métodos pasa un parámetro de entrada context .Each of these methods passes an input context parameter. Este parámetro es de tipo ITypeDescriptorContext, pero esa interfaz hereda IServiceProvider; por lo tanto, hay un método GetService disponible para implementaciones de convertidor de tipos.This parameter is of type ITypeDescriptorContext, but that interface inherits IServiceProvider, and therefore, there is a GetService method available to type converter implementations.

En el siguiente pseudocódigo se muestra cómo una implementación de convertidor de tipos para usos XAML puede consultar los servicios de una de sus invalidaciones, en este caso ConvertFrom:The following pseudocode illustrates how a type converter implementation for XAML usages might query for services in one of its overrides, in this case ConvertFrom:

public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext,  
  CultureInfo cultureInfo,  
  object source)  
{  
    IRootObjectProvider rootProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;  
    if (rootProvider != null && source is String)  
    {  
        //return something, else ...  
    }  
    throw GetConvertFromException(source);  
}  

Servicios para un serializador de valorServices for a Value Serializer

Para el contexto de serializador de valor, se usa un tipo de proveedor de servicios que es específico de la clase ValueSerializer , IValueSerializerContext.For value serializer context, you use a service provider type that is specific to the ValueSerializer class, IValueSerializerContext. Ese contexto se pasa a las invalidaciones de los cuatro métodos virtuales ValueSerializer .That context is passed to overrides of the four ValueSerializer virtual methods. Llame a GetService desde el contexto para obtener servicios.Call GetService from the context to obtain services.

Uso de los contextos de proveedor de servicio XAMLUsing the XAML Service Provider Contexts

El proveedor de servicios para el acceso GetService a los servicios XAML disponible para las extensiones de marcado o los convertidores de tipos se implementa como una clase interna, con exposición solo en la interfaz y cómo se pasa al contexto pertinente.The service provider for GetService access to XAML services available to markup extensions or type converters is implemented as an internal class, with exposure only through the interface and how it is passed into the relevant context . Siempre que una operación de procesamiento de XAML de las implementaciones de servicios XAML de .NET Framework predeterminadas de ruta de acceso de carga o ruta de acceso invoca los métodos de convertidor de tipos o extensión de marcado pertinentes que requieren un contexto de servicio, se pasa este objeto interno.Whenever a XAML processing operation in the default .NET Framework XAML Services implementations of load path or save path invokes the relevant markup extension or type converter methods that require a service context, this internal object is passed. Dependiendo de las circunstancias, el contexto de servicio del sistema proporciona MarkupExtensionContext o TextSyntaxContext, pero las características específicas de ambas clases son internas.Depending on the circumstance, the system service context provides either MarkupExtensionContext or TextSyntaxContext, but the specifics of both of these classes are internal. La interacción con estas clases se limita a pedir servicios desde ellas con GetService.Your interaction with these classes is limited to requesting services from them, through GetService.

Servicios disponibles desde el contexto de servicio XAML de .NET FrameworkAvailable Services from the .NET Framework XAML Service Context

Los servicios XAML de .NET Framework incluyen los servicios para las extensiones de marcado, los convertidores de tipos, los serializadores de valor y otros usos potenciales..NET Framework XAML Services defines services for markup extensions, type converters, value serializers, and potentially other usages. En las secciones siguientes se describe cada uno de estos servicios y se proporcionan instrucciones sobre cómo usarlos en una implementación.The following sections describe each of these services and provide guidance about how the service might be used in an implementation.

IServiceProviderIServiceProvider

Documentación de referencia: IServiceProviderReference documentation: IServiceProvider

Relevante para: Operación básica de una infraestructura basada en servicios en el .NET Framework para que pueda llamar a IServiceProvider.GetService.Relevant to: Basic operation of a service-based infrastructure in the .NET Framework so that you can call IServiceProvider.GetService.

ITypeDescriptorContextITypeDescriptorContext

Documentación de referencia: ITypeDescriptorContextReference documentation: ITypeDescriptorContext

Deriva de IServiceProvider.Derives from IServiceProvider. Esta clase representa el contexto de las firmas estándares TypeConverter ; TypeConverter es una clase que existe desde .NET Framework 1.0.This class represents context in the standard TypeConverter signatures; TypeConverter is a class that has existed since .NET Framework 1.0. Es anterior a XAML y el escenario XAML TypeConverter para la conversión de tipo de valor de cadena.It predates XAML and the XAML TypeConverter scenario for string-value type conversion. En el contexto de los servicios XAML de .NET Framework, los métodos de TypeConverter se implementan de forma explícita.In the .NET Framework XAML Services context, methods of TypeConverter are implemented explicitly. El comportamiento de la implementación explícita indica a los llamadores que la API ITypeDescriptorContext no es relevante para los sistemas de tipos XAML ni para leer o escribir objetos desde XAML.The explicit implementation's behavior indicates to callers that the ITypeDescriptorContext API is not relevant for XAML type systems, or for reading or writing objects from XAML. Container, Instancey PropertyDescriptor generalmente devuelven null de contextos de los servicios XAML de .NET Framework.Container, Instance, and PropertyDescriptor generally return null from .NET Framework XAML Services contexts.

IValueSerializerContextIValueSerializerContext

Documentación de referencia: IValueSerializerContextReference documentation: IValueSerializerContext

Se deriva de ITypeDescriptorContext y también se basa en las implementaciones explícitas para suprimir las implicaciones falsas sobre el sistema de tipos XAML.Derives from ITypeDescriptorContext and also relies on explicit implementations to suppress false implications about the XAML type system. Admite los métodos del asistente de búsqueda estática en ValueSerializer.Supports the static lookup helper methods on ValueSerializer.

IXamlTypeResolverIXamlTypeResolver

Documentación de referencia: IXamlTypeResolverReference documentation: IXamlTypeResolver

Definida por: System.Windows.Markup espacio de nombres, ensamblado System.XamlDefined by: System.Windows.Markup namespace, System.Xaml assembly

Relevante para: Escenarios de ruta de acceso de carga e interacción con el contexto de esquema XAMLRelevant to: Load path scenarios, and interaction with XAML schema context

API de servicio: ResolveService API: Resolve

Puede influir en la asignación de tipo XAML a CLR que es necesaria cuando el escritor de XAML construye un objeto CLR en un gráfico de objetos.Can influence the XAML-to-CLR type mapping that is necessary when the XAML writer constructs a CLR object in an object graph. Resolve procesa una cadena potencialmente calificada con prefijo que corresponde a un nombre de tipo XAML (XamlType.Name) y devuelve un CLR Type.Resolve processes a potentially prefix-qualified string that corresponds to a XAML type name (XamlType.Name), and returns a CLR Type. La resolución de los tipos depende normalmente y en gran medida del contexto de esquema XAML.Resolving types is typically heavily dependent on XAML schema context. Solo el contexto de esquema XAML conoce consideraciones como qué ensamblados se cargan y a cuáles de estos ensamblados se puede o se debe acceder para la resolución de tipo.Only the XAML schema context is aware of considerations such as which assemblies are loaded, and which of these assemblies can or should be accessed for type resolution.

IUriContextIUriContext

Documentación de referencia: IUriContextReference documentation: IUriContext

Definida por: System.Windows.Markup espacio de nombres, ensamblado System.XamlDefined by: System.Windows.Markup namespace, System.Xaml assembly

Relevante para: Cargar la ruta de acceso y la administración de rutas de acceso de x:Uri los valores de miembro que son Uri o valores.Relevant to: Load path and save path handling of member values that are URIs or x:Uri values.

API de servicio: BaseUriService API: BaseUri

Este servicio notifica una raíz URI disponible globalmente, si existe.This service reports a globally available URI root, if any. La raíz URI puede usarse para resolver los URI relativos como URI absolutos o viceversa.The URI root can be used to resolve relative URIs to absolute URIs or vice versa. Este escenario es principalmente relevante para los servicios de aplicación expuestos por un marco determinado o para las capacidades de una clase de elemento raíz usada con frecuencia en un marco.This scenario is mainly relevant to application services that are exposed by a particular framework, or capabilities of a frequently used root element class in a framework. El URI base se puede establecer como una opción de lector XAML que se pasa a la escritura de objeto XAML y es notificada por este servicio.The base URI can be established as a XAML reader setting, which is then passed through to the XAML object writer and reported by this service.

IAmbientProviderIAmbientProvider

Documentación de referencia: IAmbientProviderReference documentation: IAmbientProvider

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Control de rutas de acceso de carga y referencias o optimizaciones de búsqueda de tipos.Relevant to: Load path handling and type lookup deferrals or optimizations.

API de servicio: GetAllAmbientValuesy otras 3.Service APIs: GetAllAmbientValues, 3 others.

El concepto de ambiente en XAML es una técnica para marcar a un miembro determinado de un tipo como ambiente.The ambience concept in XAML is a technique for marking a particular member of a type as ambient. Como alternativa, un tipo puede ser ambiente para que todos los valores de propiedad que contienen una instancia del tipo se consideren propiedades de ambiente.Alternatively, a type can be ambient so that all property values that hold an instance of the type should be considered ambient properties. Las extensiones de marcado o los convertidores de tipos que son más adelante el flujo de nodo XAML y que son descendientes del gráfico de objetos pueden acceder a la propiedad de ambiente o instancia de tipo en tiempo de carga; o bien, puede usar el conocimiento de la estructura de ambiente en el momento de guardar.Markup extensions or type converters that are further along the XAML node stream and that are descendants in the object graph can access the ambient property or type instance at load time; or they can use knowledge of the ambient structure at save time. Esto puede afectar al grado de calificación que se necesita para resolver tipos para otros servicios, como IXamlTypeResolver o x:Type.This can affect the degree of qualification that is needed to resolve types for other services, such as for IXamlTypeResolver or for x:Type. Vea también AmbientPropertyValue.See also AmbientPropertyValue.

IXamlSchemaContextProviderIXamlSchemaContextProvider

Documentación de referencia: IXamlSchemaContextProviderReference documentation: IXamlSchemaContextProvider

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Ruta de acceso de carga y cualquier operación que deba resolver un tipo XAML en un tipo de respaldo.Relevant to: Load path, and any operation that must resolve a XAML type to a backing type.

API de servicio: SchemaContextService API: SchemaContext

El contexto de esquema XAML es necesario para las operaciones de carga diferidas porque el mismo contexto del esquema debe actuar sobre el área diferida para integrar el contenido diferido.XAML schema context is necessary for any defer load operations, because the same schema context must act on the deferred area in order to integrate the deferred content. Para más información sobre la función del contexto de esquema XAML, vea XAML Services.For more information about the role of the XAML schema context, see XAML Services.

IRootObjectProviderIRootObjectProvider

Documentación de referencia: IRootObjectProviderReference documentation: IRootObjectProvider

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Ruta de acceso de carga.Relevant to: Load path.

API de servicio: RootObjectService API: RootObject

Este escenario es relevante para los servicios de aplicación expuestos por un marco determinado o por las capacidades de una clase de elemento raíz usada con frecuencia en un marco.The service is relevant to application services that are exposed by a particular framework or by capabilities of a frequently used root element class in a framework. Un escenario para obtener el objeto raíz es la conexión con el código subyacente y la conexión de eventos.One scenario for obtaining the root object is connecting code-behind and event wiring. Por ejemplo, la implementación de WPF de x:Class se usa para compilar el marcado y conectar cualquier atributo de controlador de eventos que se encuentra en cualquier otra posición del marcado XAML.For example, the WPF implementation of x:Class is used for markup compile and wiring of any event handler attribute that is found at any other position in the XAML markup. El punto de conexión de las clases parciales definidas por el código subyacente y el marcado para la compilación del marcado está en el elemento raíz.The connection point of markup and code-behind defined partial classes for markup compile is at the root element.

IXamlNamespaceResolverIXamlNamespaceResolver

Documentación de referencia: IXamlNamespaceResolverReference documentation: IXamlNamespaceResolver

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Ruta de acceso de carga, guardar ruta de acceso.Relevant to: Load path, save path.

API de servicio: GetNamespace para la ruta de acceso de carga y GetNamespacePrefixes para la ruta de acceso de almacenamiento.Service API: GetNamespace for load path, GetNamespacePrefixes for save path.

IXamlNamespaceResolver es un servicio que puede devolver un URI/identificador de espacio de nombres XAML basado en su prefijo según se ha asignado en el marcado XAML original.IXamlNamespaceResolver is a service that can return a XAML namespace identifier / URI based on its prefix as mapped in the originating XAML markup.

IProvideValueTargetIProvideValueTarget

Documentación de referencia: IProvideValueTargetReference documentation: IProvideValueTarget

Definida por: System.Windows.Markup espacio de nombres, ensamblado System.XamlDefined by: System.Windows.Markup namespace, System.Xaml assembly

Relevante para: Ruta de acceso de carga y ruta de acceso de guardado.Relevant to: Load path and save path.

API de servicio: TargetObjecty TargetProperty.Service APIs: TargetObject, TargetProperty.

IProvideValueTarget permite que una extensión de marcado o tipo de convertidor obtenga el contexto sobre dónde está actuando en tiempo de carga.IProvideValueTarget enables a type converter or markup extension to obtain context about where it is acting at load time. Las implementaciones pueden usar este contexto para invalidar un uso.Implementations might use this context to invalidate a usage. Por ejemplo, WPF tiene lógica dentro de algunas de sus extensiones de marcado como DynamicResourceExtension.For example, WPF has logic inside some of its markup extensions such as DynamicResourceExtension. Las lógica comprueba TargetProperty para asegurarse de que la extensión solo se use para establecer las propiedades de dependencia (o una lista breve de otras propiedades de no dependencia).The logic checks the TargetProperty to make sure that the extension is only used to set dependency properties (or a short list of other non-dependency properties).

IXamlNameResolverIXamlNameResolver

Documentación de referencia: IXamlNameResolverReference documentation: IXamlNameResolver

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Carga: definición del gráfico de objetos de ruta de acceso x:Name, x:Referenceresolución de objetos identificados por, o técnicas específicas del marco de trabajo.Relevant to: Load path object graph definition, resolving objects identified by x:Name, x:Reference, or framework-specific techniques.

API de servicio: Resolve; otras API para los escenarios más avanzados como el tratamiento de las referencias adelantadas.Service APIs: Resolve; other APIs for more advanced scenarios such as dealing with forward references.

La implementación de servicios XAML de .NET Framework de tratamiento de x:Reference se basa en este servicio.The .NET Framework XAML Services implementation of x:Reference handling relies on this service. Los marcos o las herramientas específicos que admiten el marco usan este servicio para el control de x:Name o el control de propiedades (RuntimeNamePropertyAttribute con atributos) equivalente.Specific frameworks or tools that support the framework use this service for x:Name handling or equivalent (RuntimeNamePropertyAttribute attributed) property handling.

IDestinationTypeProviderIDestinationTypeProvider

Documentación de referencia: IDestinationTypeProviderReference documentation: IDestinationTypeProvider

Definida por: System.Xaml espacio de nombres, ensamblado System.XamlDefined by: System.Xaml namespace, System.Xaml assembly

Relevante para: Resolución de la ruta de acceso de carga de información de tipo CLR indirecta.Relevant to: Load path resolution of indirect CLR type information.

API de servicio: GetDestinationTypeService API: GetDestinationType

Para obtener más información, consulta IDestinationTypeProvider.For more information, see IDestinationTypeProvider.

Vea tambiénSee also