1

我在网上找到了这段小代码:

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);
}

它基本上做了两件事:
1.创建一个单例(非常方便)
2.允许您在不创建静态控件的情况下使用转换器(MarkupExtension

我想知道的是,如果我使用 Prism v4 作为我的框架,是否已经内置了类似的东西。我宁愿使用 Prism 内置的任何工具,也不愿编写类似或重复的代码。我对 Prism 不是很熟悉,但我在里面找不到这样的东西。哦,我也有类似的功能IMultiValueConverter

4

1 回答 1

2

恕我直言,您的转换器需要一个单例来避免多个实例有点矫枉过正,因为它们是它们所驻留的视图的资源,并且将与视图一起被 GC 处理,并且它们本身非常轻量级。

不过,对于您的问题...Prism 旨在构建模块化应用程序,并且如果您假设这是提供实用程序类型类/方法的领域,那么它不在提供范围内。在 Prism 中注册单例;这当然是可能的。

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

上面的代码将与任何解决方案相关联ISingletonSingleton并且通过使用该ContainerControlledLifetimeManager()参数将在整个容器生命周期内提供单个实例。

于 2011-01-21T22:48:36.240 回答