MarkupExtension.ProvideValue(IServiceProvider) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Quando implementado numa classe derivada, devolve um objeto que é fornecido como valor da propriedade alvo para esta extensão de marcação.
public:
abstract System::Object ^ ProvideValue(IServiceProvider ^ serviceProvider);
public abstract object ProvideValue(IServiceProvider serviceProvider);
abstract member ProvideValue : IServiceProvider -> obj
Public MustOverride Function ProvideValue (serviceProvider As IServiceProvider) As Object
Parâmetros
- serviceProvider
- IServiceProvider
Um assistente prestador de serviços que pode fornecer serviços para a extensão de marcação.
Devoluções
O valor do objeto a definir na propriedade onde a extensão é aplicada.
Observações
Quando um processador XAML processa um nó tipo e um valor de membro que é uma extensão de marcação, invoca o ProvideValue método dessa extensão de marcação e escreve o resultado no grafo objeto ou no fluxo de serialização. O escritor de objetos XAML passa o contexto do serviço a cada uma dessas implementações através do serviceProvider parâmetro.
Consulte a secção "Notas para Implementadores" para mais informações sobre como implementar ProvideValue uma extensão de marcação personalizada.
Notas de uso do WPF
Importante
WPF classes que têm interações específicas com operações de conjunto de marcação não devem depender de IReceiveMarkupExtension para uma implementação .NET Framework 4. Use XamlSetMarkupExtensionAttributeos callbacks -atribuídos em vez disso.
Notas para Implementadores
Os serviços comuns devolvidos pelo fornecedor de serviços padrão, normalmente disponíveis para uma implementação personalizada ou existente MarkupExtension , incluem os seguintes serviços principais.
IProvideValueTarget reporta a referência do objeto e um identificador de propriedade do contexto onde a extensão de marcação é usada
IXamlTypeResolver expõe um serviço que se assemelha ao comportamento geral de escrita de objetos XAML, que pode fornecer um Type baseado num nome de tipo XAML. O nome pode opcionalmente incluir um prefixo para um namespace XAML mapeado.
IXamlSchemaContextProvider expõe diretamente o contexto do esquema XAML ativo. A partir do relatório XamlSchemaContext, pode obter informação de contexto do esquema XAML, como como as assembleias são mapeadas para suporte de tipos, prefixo preferido nas assembleias, listas de cada uma XamlType numa assembleia, e assim por diante.
Outros serviços disponíveis para cenários de extensão de marcação mais especializados incluem:
Potencialmente, as implementações de ProvideValue(IServiceProvider) podem ignorar o serviceProvider parâmetro. Isto é viável para alguns cenários básicos, onde não é necessário qualquer contexto para devolver um valor.
No uso típico, os Serviços XAML do Framework .NET e os escritores de objetos XAML implementados fornecem um fornecedor de serviços a todos os métodos de conversor de valor invocados durante o processamento XAML. No entanto, para robustez, deve fornecer caminhos de código para valores nulos tanto para o próprio fornecedor de serviço como para qualquer serviço solicitado. Podem ocorrer valores nulos se a sua extensão de marcação for aplicada numa situação em que o suporte típico de serviço fornecido por uma infraestrutura de processador XAML não está disponível.
Para mais informações sobre os serviços disponíveis no contexto do fornecedor de serviços XAML e como os utilizar, consulte Conversores de Tipos e Extensões de Marcação para XAML.
Implementações que exigem que um determinado serviço esteja disponível para produzir um resultado útil ProvideValue(IServiceProvider) devem lançar exceções se esse serviço não estiver disponível. A exceção recomendada ao lançamento é InvalidOperationException.
A implementação pode também lançar exceções se um dos argumentos que a extensão de marcação personalizada necessita para fornecer um valor for nulo, for inválido para o seu tipo de dado ou não contiver um valor que a extensão de marcação seja capaz de processar. A exceção recomendada ao lançamento é InvalidOperationException.