Prism v4: есть ли в нем способ обработки преобразователей значений (как одиночных)? - PullRequest
1 голос
/ 22 января 2011

Я нашел этот небольшой фрагмент кода в Интернете:

public abstract class ConverterExtension<T>: MarkupExtension, IValueConverter
    where T: class, new()
{
    private static T _converter = null;

    public override Object ProvideValue(IServiceProvider serviceProvider)
    {
        return _converter ?? (_converter = new T());
    }

    public abstract Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture);

    public abstract Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture);
}

Он в основном делает 2 вещи:1. создает синглтон (очень удобно)2. Позволяет использовать конвертер без создания статического элемента управления (MarkupExtension)

. Что мне интересно, так это то, что если я использую Prism v4 в качестве фреймворка, то это уже встроено.лучше использовать все инструменты, встроенные в Prism, чем писать похожий или дублирующий код.Я не очень знаком с Призмой, но я не смог найти ничего подобного.Ох, и у меня есть аналогичная функция для IMultiValueConverter.

1 Ответ

2 голосов
/ 22 января 2011

ИМХО, необходимость в синглтоне по отношению к вашим конвертерам, чтобы избежать множественных экземпляров, немного избыточна, поскольку они являются ресурсом представления, в котором они находятся, и будут иметь GC-представление вместе с представлением и сами по себе. очень легкий.

На ваш вопрос, хотя ... Prism ориентирована на создание модульных приложений и не предназначена для предоставления классов / методов служебных типов, если вы предполагаете это. С точки зрения регистрации синглтона в Prism; это, безусловно, возможно.

IUnityContainer container;
container.RegisterType<ISingleton, Singleton>(new ContainerControlledLifetimeManager());

Приведенный выше код свяжет любое разрешение для ISingleton с Singleton и с помощью параметра ContainerControlledLifetimeManager() предоставит один экземпляр на протяжении всего времени существования контейнеров.

...