0

以前に MEF を使用したことがありますが、新しい実装で問題が発生しています。[InheritedExport] 属性を持つ基本クラスから継承するオブジェクトをエクスポートしており、それらをインポートしようとしています。

以前は、[ImportMany(typeof(mytype))] を使用して配列プロパティを設定し、CompositionInitializer.SatisfyImports(this) を使用してインポートを機能させていましたが、今では 2 つの問題があります。

1) エクスポートは別の参照アセンブリにあります。2) 4.5 フレームワークの新しい MEF には、CompositionInitializer が存在しないようです。

問題#1を解決するためにAggregateCatalogを作成しようとしていますが、ここからどこに行くべきかわかりません。

最後に、WPF アプリ全体で使用できるコレクションをインポートしようとしています。全体的な解決策を提案する際に誰かが助けてくれるなら。

4

1 に答える 1

1

1)エクスポートは別の参照アセンブリにあります。

あなたが言うように、あなたはAggregateCatalog多くのカタログを集約する必要があるでしょう。通常、パーツ(エクスポート/インポート)を含むアセンブリごとに1つのカタログが必要になります。これは、これらのロードされたアセンブリのそれぞれに対してAssemblyCatalogクラスを使用する必要があることを意味します。ロードされたアセンブリには、それらに含まれるタイプの1つを介してアクセスできます。これは、いくつかのAssemblyCatalogをAggregateCatalogに追加する小さな例です。

AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(SomeClassInSomeAssembly).Assembly));
catalog.Catalogs.Add(new AssemblyCatalog(typeof(SomeClassInAnotherAssembly).Assembly));

カタログの詳細については、この小さな記事を読むことができます。

2)CompositionInitializerは、4.5フレームワークの新しいMEFには存在しないようです。

これはでのみ利用可能ですSilverlight。次に、 CompositionContainerWPFを作成し、そのメソッドを使用する必要があります。SatisfyImports

CompositionContainer container = new CompositionContainer(catalog);
container.SatisfyImports(someObjectWithImports);
于 2013-02-24T02:53:54.303 に答える