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

基本的に2つのことを行います:
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 に答える