Contextos de serviço disponíveis para digitar os conversores e extensões de marcação
Os autores dos tipos que oferecem suporte a usos de extensão de marcação e de conversor de tipo freqüentemente devem ter informações contextuais sobre onde um uso está localizado na marcação ou ao redor de estrutura de gráfico do objeto. As informações podem ser necessárias para que o objeto fornecido é instanciado corretamente ou para que o referências de objeto a objetos existentes no gráfico de objeto pode ser feitos. Ao usar.NET Framework XAML Services, o contexto que pode ser necessário é exposta como uma série de interfaces de serviço. Código de suporte de extensão de marcação ou de conversor de tipo pode consultar um serviço por meio de um contexto de provedor de serviço que está disponível e é transmitido por meio de XamlObjectWriter ou tipos relacionados. O contexto de esquema XAML está diretamente disponível por meio de um desses serviços. Este tópico descreve como acessar os contextos do serviço de implementação de uma conversor de valor e lista os serviços normalmente disponíveis e suas funções.
Este tópico contém as seguintes seções.
- A obtenção de serviços
- Serviços para uma extensão de marcação
- Serviços de um conversor de tipo
- Serviços para um serializador de valor
- Usando os contextos de provedor de serviço XAML
- Serviços disponíveis a partir do.NET Framework contexto de serviço XAML
- Tópicos relacionados
A obtenção de serviços
Como um implementador de um conversor de valor, você freqüentemente precisa de acesso a algum tipo de contexto no qual o conversor de valor é aplicado. Neste contexto pode incluir informações como, por exemplo, o contexto de esquema ativa do XAML, acesso ao sistema de mapeamento de tipo que o contexto de esquema XAML e o gravador de objeto XAML fornecem e assim por diante. Os serviços disponíveis para uma implementação de conversor de tipo ou extensão de marcação são comunicados por meio de parâmetros de contexto que fazem parte da assinatura de cada método virtual. Em cada caso, você tem IServiceProvider implementado no contexto e pode chamar IServiceProvider.GetService para solicitar um serviço.
Serviços para uma extensão de marcação
MarkupExtensionpossui apenas um método virtual, ProvideValue. A entrada serviceProvider parâmetro é como os serviços são comunicados a implementações quando a extensão de marcação é chamada por um processador XAML. O pseudocódigo a seguir ilustra como uma implementação de extensão de marcação pode consultar para serviços no seu 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"));
}
...
}
Serviços de um conversor de tipo
TypeConvertertem quatro métodos virtuais do que usar um contexto de serviço e que suportam os usos XAML. Cada um desses métodos passa a entrada context parâmetro. Este parâmetro é do tipo ITypeDescriptorContext, mas que herda a interface IServiceProvidere portanto, há um GetService método disponível para digitar o conversor de implementações.
O pseudocódigo a seguir ilustra como uma implementação de conversor de tipo para usos XAML pode consultar para serviços em um dos seus substituições, neste caso 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);
}
Serviços para um serializador de valor
Para o contexto de serializador de valor, você usar um tipo de provedor de serviço é específico para o ValueSerializer classe, IValueSerializerContext. Esse contexto é passado para substituições dos quatro ValueSerializer métodos virtuais. Chame GetService do contexto para obter serviços.
Usando os contextos de provedor de serviço XAML
O provedor de serviços para GetService acesso a serviços XAML disponíveis para conversores de tipo ou extensões de marcação é implementado como uma classe interna, com exposição apenas por meio da interface e como ele é passado para o contexto relevante. Sempre que uma operação de processamento de XAML no padrão.Implementações de serviços do NET Framework XAML do caminho de carregar ou salvar o caminho invoca os métodos de conversor com marcação relevantes tipo ou extensão que exigem um contexto de serviço, esse objeto interno é passado. Dependendo da circunstância, o contexto de serviço do sistema fornece uma MarkupExtensionContext ou TextSyntaxContext, mas as informações específicas para essas duas classes são internas. Sua interação com essas classes é limitada aos solicitantes de serviços deles, por meio de GetService.
Serviços disponíveis a partir do.NET Framework contexto de serviço XAML
.NET Framework XAML Services define os serviços para as extensões de marcação, conversores de tipo, serializadores de valor e potencialmente outros usos. As seções a seguir descrevem cada um desses serviços e fornecem orientações sobre como o serviço pode ser usado em uma implementação.
IServiceProvider
Documentação de referência: IServiceProvider
Relevante para: A operação básica de uma infra-estrutura de serviço na.NET Framework para que você possa chamar IServiceProvider.GetService.
ITypeDescriptorContext
Documentação de referência: ITypeDescriptorContext
Deriva de IServiceProvider. Esta classe representa o contexto no padrão TypeConverter assinaturas; TypeConverteré uma classe que existia desde .NET Framework versão 1.0. Ele antecede o XAML e o XAML TypeConverter o cenário para conversão de tipo de valor de seqüência. No.O contexto de serviços de XAML do NET Framework, métodos de TypeConverter são implementados explicitamente. O comportamento da implementação explícita indica aos chamadores que o ITypeDescriptorContext API é não relevante para os sistemas de tipo XAML, ou para leitura ou gravação a objetos do XAML. Container, Instance, e PropertyDescriptor geralmente retornam null de.NET Framework XAML Services contextos.
IValueSerializerContext
Documentação de referência: IValueSerializerContext
Deriva de ITypeDescriptorContext e também se baseia em implementações explícitas para suprimir as implicações falsos sobre o sistema de tipo XAML. Oferece suporte aos métodos auxiliares estáticos de pesquisa em ValueSerializer.
IXamlTypeResolver
Documentação de referência: IXamlTypeResolver
Definido por: System.Windows.Markupnamespace, o assembly de System.Xaml
Relevante para: Cenários de caminho de carga e a interação com o contexto de esquema XAML
API do serviço: Resolve
Pode influenciar o mapeamento do tipo de XAML para CLR é necessário quando o gravador XAML constrói um objeto CLR em um gráfico de objeto. Resolveprocessa uma seqüência de caracteres potencialmente qualificados de prefixo que corresponde a um nome de tipo XAML (XamlType.Name) e retorna um CLR Type. Tipos de resolução normalmente é muito dependente do contexto de esquema XAML. Somente o contexto de esquema XAML é ciente das considerações como, por exemplo, quais assemblies carregados e qual desses assemblies podem ou devem ser acessados para resolução de tipo.
IUriContext
Documentação de referência: IUriContext
Definido por: System.Windows.Markupnamespace, o assembly de System.Xaml
Relevante para: Caminho de carregar e salvar o tratamento do caminho dos valores de membro são URIs ou x:Uri valores.
API do serviço: BaseUri
Este serviço relata uma raiz URI disponível globalmente, se houver. A raiz URI pode ser usada para resolver os URIs relativos para URIs absoluto ou vice-versa. Esse cenário é principalmente relevante para os serviços de aplicativos que são expostos por recursos de uma classe de elemento raiz usados com freqüência em uma estrutura ou uma estrutura específica. O URI de base pode ser estabelecido como um leitor XAML, configuração, que é passado para o gravador de objeto XAML e relatado por este serviço.
IAmbientProvider
Documentação de referência: IAmbientProvider
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Carregar deferrals de pesquisa de manipulação e o tipo de caminho ou otimizações.
APIs de serviço: GetAllAmbientValues3 outros.
O conceito de ambiência em XAML é uma técnica para um determinado membro de um tipo como o ambiente de marcação. Como alternativa, um tipo pode ser temperatura ambiente para que todos os valores de propriedade que mantêm uma instância do tipo devem ser considerados propriedades do ambiente. As extensões de marcação ou conversores de tipo que são ainda mais ao longo do fluxo de nó de XAML e que são descendentes do gráfico de objeto podem acessar a propriedade de ambiente ou a instância de tipo em tempo de carga; ou eles podem usar dados de Conhecimento da estrutura do ambiente, a economizar tempo. Isso pode afetar o grau de qualificação é necessária para resolver os tipos de outros serviços, como de IXamlTypeResolver ou x:Type. Consulte também AmbientPropertyValue.
IXamlSchemaContextProvider
Documentação de referência: IXamlSchemaContextProvider
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Carregar o caminho e qualquer operação que um tipo XAML deve ser resolvido para um tipo de backup.
API do serviço: SchemaContext
Contexto de esquema XAML é necessário para qualquer operação de carga de adiar, porque o mesmo contexto de esquema deve atuar na área adiada para integrar o conteúdo adiado. Para obter mais informações sobre a função do contexto de esquema XAML, consulte Serviços XAML.
IRootObjectProvider
Documentação de referência: IRootObjectProvider
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Caminho de carga.
API do serviço: RootObject
O serviço é relevante para os serviços de aplicativos que são expostos por uma determinada estrutura ou por recursos de uma classe de elemento raiz usados com freqüência em uma estrutura. Um cenário para obter o objeto raiz está se conectando a code-behind e fiação de evento. Por exemplo, a implementação do WPF de x:Class é usado para compilação de marcação e a fiação de qualquer atributo de manipulador de eventos é encontrado em qualquer outra posição na marcação XAML. O ponto de conexão de marcação e code-behind definido classes parciais para compilação de marcação é o elemento raiz.
IXamlNamespaceResolver
Documentação de referência: IXamlNamespaceResolver
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Caminho de carregar, salvar o caminho.
API do serviço: GetNamespacepara carregar demarcador, GetNamespacePrefixes para salvar o caminho
IXamlNamespaceResolveré um serviço que pode retornar um identificador de namespace XAML / URI com base no seu prefixo mapeado na marcação XAML de origem.
IProvideValueTarget
Documentação de referência: IProvideValueTarget
Definido por: System.Windows.Markupnamespace, o assembly de System.Xaml
Relevante para: Carregar o caminho e salve o caminho.
APIs de serviço: TargetObject, TargetProperty.
IProvideValueTargetpermite que uma extensão tipo de conversor ou marcação obter contexto sobre onde ele está agindo em tempo de carregamento. Implementações podem usar neste contexto para invalidar um uso. Por exemplo, WPF tem lógica dentro de algumas de suas extensões de marcação, como DynamicResourceExtension. As verificações de lógica de TargetProperty para certificar-se de que a extensão só é usada para definir as propriedades de dependência (ou uma pequena lista de outras propriedades de dependência não).
IXamlNameResolver
Documentação de referência: IXamlNameResolver
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Carregar a definição de gráfico do objeto de caminho, resolvendo objetos identificados por x:Name, x:Reference, ou específica do framework técnicas.
APIs de serviço: Resolve; outras APIs para cenários mais avançados, como lidar com referências de encaminhamento.
A.Implementação dos serviços do NET Framework XAML x:Reference tratamento depende desse serviço. Estruturas específicas ou ferramentas que oferecem suporte a estrutura de usam este serviço para x:Name Manuseio ou equivalente (RuntimeNamePropertyAttribute atribuído) tratamento de propriedade.
IDestinationTypeProvider
Documentação de referência: IDestinationTypeProvider
Definido por: System.Xamlnamespace, o assembly de System.Xaml
Relevante para: Carregar a resolução de caminho indireto informações de tipo CLR.
API do serviço: GetDestinationType
For more information, see IDestinationTypeProvider.