MarkupExtension.ProvideValue——是否实际使用了IServiceProvider

本文关键字:IServiceProvider ProvideValue 是否 MarkupExtension | 更新日期: 2023-09-27 18:08:41

我正在检查我的一些旧代码,遇到了一个混合IValueConverter/MarkupExtension类。这让我想知道ProvideValue方法中的IServiceProvider是否真的有用,它是如何有用的?

我看到IServiceProvider只有一个方法:GetService,它必须转换为适当的服务类型。我还研究了MarkupExtension。MSDN页面,它列出了不同类型的服务。我想,我只是想知道这些服务是否有用或者我应该让我的方法保持原样?

当前方法:

public Object ProvideValue(IServiceProvider serviceProvider)
{
    return new MyConverter();
}

基本上,我应该这样做吗?

public Object ProvideValue(IServiceProvider serviceProvider)
{
    var provider = serviceProvider as SomeType;
    if (provider == null) return new MyConverter();
    //Do something with the provider here?
}

MarkupExtension.ProvideValue——是否实际使用了IServiceProvider

提供者可以用来获取目标对象和属性的信息。如果你不需要知道这些值,那么你就不需要使用

public override object ProvideValue(IServiceProvider provider)
{
    IProvideValueTarget service = (IProvideValueTarget)provider.GetService(typeof(IProvideValueTarget));
    DependencyObject targetObject = service.TargetObject as DependencyObject;
    DependencyProperty targetProperty = service.TargetProperty as DependencyProperty;
    // ...
}

如果您的MarkupExtension不需要与IServiceProvider进行任何交互就可以工作,那么显然访问它没有任何好处。我看过和写过的所有MarkupExtension/ValueConverter组合也都属于这一类。

从实际问题开始,如果你只是在寻找阅读材料,这里有更多关于提供商可以提供哪些服务以及它们如何有用的信息。

相关文章:
  • 没有找到相关文章