2010-12-02 10 views
0

私のアプリにはプリズム/ mvvm/mefを使用し、ViewExport(Region)でマークされたすべてのビューを読み込むとうまくいきます(StockTraderRI AutoPopulateExportedViewsBehaviourを使用しています)。MEFを使用してクラスのグループを初期化するにはどうすればよいですか?

今、このランタイムルックアップ機能を使用して、他のバックグラウンドクラスを初期化したいと考えています。

は、私はインターフェイス

public interface ITable 
{ 
} 

を持って、私は、このインターフェイスから派生するクラスの多くを得たと言います。

これらの派生クラスを何らかの形でマークし、実行時にMEFを作成してリストやコンテナに追加する方法はありますか?

どこにも表示されていない地域のように、私は期待していますか?私はMEFでこれをどのように達成するでしょうか?

答えて

3

確かにあります! インターフェイスを継承するクラスをExport属性でマークし、別のクラスで、[ImportMany]属性を持つ汎用タイプObservableCollectionのプロパティを自分で作成します。そのトリックを行う必要があります。

+0

しかし、MEFはどのようなものがどのコレクションに属しているかをどのように知っていますかジェネリックタイプでは? – Sam

+1

はい実際には、異なるクラスは[Export(typeable(ITable))]で装飾され、MEFはコレクションを満たすためにジェネリック型を継承または対応するクラスを探し、インスタンスを作成してコレクションに追加します。 –

1

あなたはユニティ代わりにMEFを使用している場合、あなたはまた、あなたのブートストラップ内のコンテナのコー​​ルを使用することができます。

var tables = Container.GetExportedValues<ITable>(); 

コンテナは、あなたのMEFBootstrapperのパブリックプロパティです。

+0

ええ、Unityとは何ですか? – Sam

+0

これは別の依存性注入容器です。 MEFは私の好みです。 – grimcoder

関連する問題