8

MEF についていくつかの調査を行った後、MSDN によるとCreationPolicy.Sharedプロパティに出会いました。

関連付けられた ComposablePart の単一の共有インスタンスが CompositionContainer によって作成され、すべてのリクエスターによって共有されることを指定します。

このポリシーを使用してエクスポートするクラスにアクセスするコンテナーが 1 つだけであることを常に確認している限り、これは良いことのように思えます。では、エクスポートされた型に 1 つのコンテナーのみがアクセスするようにするにはどうすればよいでしょうか? これが私のシナリオです:

メモリ内データ用にシングルトンのようなクラスを利用する必要がある Windows サービスがあります。データは永続的ではないため、サービスが開始されるたびに新しく作成されるようにしたいのですが、サービスが停止すると何の役にも立ちません。私のサービスの複数のスレッドは、スレッド セーフな方法でこのオブジェクトを読み書きする必要があるため、最初の計画では、ConcurrentDictionaryから継承して、それに対するスレッド セーフな操作を保証することでした。

このクラスを利用するスレッドはすべて単一の抽象基本クラスから継承するため、このクラス (およびこのクラスのみ) を MEF からインポートして、希望どおりに動作させる方法はありますか?

あなたが持っているかもしれないヒントをありがとう、私はMEFに慣れていないので、私はまだインとアウトを学んでいます

4

2 に答える 2

1

異なるコンテナー間で絶対にシングルトンでなければならない場合は、プライベート コンストラクターを使用して、Instanceコンテナーで管理されていない "従来の" シングルトンのように静的プロパティを公開できます。次に、コンポジション ルートでComposeExportedValueを使用してコンテナーに登録します。

container.ComposeExportedValue(MySingleton.Instance);
于 2012-06-15T19:30:52.923 に答える
0

このブログ投稿で説明されているように、他のスレッドをブロックするため、常に Lazy タイプを使用できます。 -pattern.aspx

于 2012-06-15T19:47:46.790 に答える