MarkupExtension.ProvideValue - действительно ли используется IServiceProvider? - PullRequest
5 голосов
/ 15 сентября 2011

Я просматривал старый код и наткнулся на гибридный класс IValueConverter / MarkupExtension.Меня удивило, был ли метод IServiceProvider в ProvideValue действительно полезным и как он был бы полезен?

Я вижу, что IServiceProvider имеет только один метод: GetService, который должен бытьприведите к правильному типу обслуживания.Я также посмотрел на страницу MarkupExtension.ProvideValue 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?
}

Ответы [ 2 ]

11 голосов
/ 15 сентября 2011

Поставщик может быть полезен для получения информации о целевом объекте и свойстве, например, к которому он применяется.Если вам не нужно знать эти значения, вам не нужно их использовать

Пример

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;

    // ...
}
6 голосов
/ 15 сентября 2011

Если ваш MarkupExtension работает без необходимости какого-либо взаимодействия с IServiceProvider, то, очевидно, ничего не получится получить к нему доступ.Все MarkupExtension / ValueConverter комбо, которые я видел и написал сам, также попадают в эту категорию.

Если перейти от практических вопросов, если вы просто ищете материал для чтения, есть больше информации о том, какие услуги предоставляет поставщикможно сделать доступными и чем они могут быть полезны здесь .

...