Compartilhar via


MarkupExtension.ProvideValue(IServiceProvider) Método

Definição

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.

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.

Aplica-se a

Confira também