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?
}
提供者可以用来获取目标对象和属性的信息。如果你不需要知道这些值,那么你就不需要使用
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
组合也都属于这一类。
从实际问题开始,如果你只是在寻找阅读材料,这里有更多关于提供商可以提供哪些服务以及它们如何有用的信息。