MarkupExtension.ProvideValue(IServiceProvider) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Quando implementada em uma classe derivada, retorna um objeto que é fornecido como o valor da propriedade de destino 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 auxiliar de provedor de serviço que pode fornecer serviços para a extensão de marcação.
Retornos
O valor do objeto para definir na propriedade na qual a extensão é aplicada.
Comentários
Quando um processador XAML processa um nó de tipo e um valor de membro que é uma extensão de marcação, ele invoca o ProvideValue método dessa extensão de marcação e grava o resultado no fluxo de serialização ou grafo de objeto. O gravador de objetos XAML passa o contexto de serviço para cada implementação desse tipo por meio do serviceProvider
parâmetro .
Consulte a seção "Observações aos implementadores" para obter mais informações sobre como implementar ProvideValue em uma extensão de marcação personalizada.
Notas de uso do WPF
Importante
As classes WPF que têm interações específicas com operações de conjunto de marcação não devem depender IReceiveMarkupExtension de uma implementação .NET Framework 4. Em vez disso, use XamlSetMarkupExtensionAttributeretornos de chamada atribuídos a .
Notas aos Implementadores
Os serviços comuns retornados pelo provedor de serviços padrão que normalmente está disponível para uma implementação personalizada ou existente MarkupExtension incluem os serviços primários a seguir.
IProvideValueTarget relata a referência de objeto e um identificador de propriedade do contexto em que a extensão de marcação é usada
IXamlTypeResolver expõe um serviço que paraleliza o comportamento geral de gravação de objeto XAML que pode fornecer um Type com base em um nome de tipo XAML. Opcionalmente, o nome pode incluir um prefixo para um namespace XAML mapeado.
IXamlSchemaContextProvider expõe o contexto de esquema XAML ativo diretamente. No relatado XamlSchemaContext, você pode obter informações de contexto de esquema XAML, como como assemblies são mapeados para suporte de tipo, prefixo preferencial em assemblies, listas de cada XamlType um em um assembly 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 . Isso é viável para alguns cenários básicos, em que nenhum contexto é necessário para retornar um valor.
Em uso típico, o .NET Framework serviços XAML e os gravadores de objetos XAML implementados fornecerão um provedor de serviços para todos os métodos conversores de valor que são invocados durante o processamento XAML. No entanto, para robustez, você deve fornecer caminhos de código para valores nulos para o próprio provedor de serviços e para qualquer serviço solicitado. Valores nulos poderão ocorrer se a extensão de marcação for aplicada em uma circunstância em que o suporte de serviço típico fornecido por uma infraestrutura de processador XAML não esteja disponível.
Para obter mais informações sobre os serviços disponíveis no contexto do provedor de serviços XAML e como usá-los, consulte Conversores de tipo e extensões de marcação para XAML.
As implementações que exigem que um determinado serviço esteja disponível para produzir um resultado útil ProvideValue(IServiceProvider) devem gerar exceções se esse serviço não estiver disponível. A exceção recomendada para gerar é InvalidOperationException.
A implementação também poderá gerar exceções se um dos argumentos de que a extensão de marcação personalizada precisa para fornecer um valor for nulo, for inválido para seu tipo de dados ou não contiver um valor que a extensão de marcação seja capaz de processar. A exceção recomendada para gerar é InvalidOperationException.