私は MEF を初めて使用し、それを使用してプラグイン システムを構築しようとしていますが、ステップ 1 で行き詰っています。
Andrew Whitechapelの記事をフォローしています。彼のサンプル コードをダウンロードしたところ、正常に実行されました ("エクスポート" アセンブリの 1 つを削除すると、それらは彼のサンプルでは相互に排他的であり、MEF アセンブリを参照します)。
このサンプルは、単一のパーツのインポートを示しています。複数のパーツをインポートしたい (すべて同じインターフェースに基づく)。そこで、サンプルコードを次のように変更します。
[Import]
// OLD - public Interface.ICalculate Calculate { get; set; }
public IEnumerable<Interface.ICalculate> Calculators { get; set; }
// OLD - Console.WriteLine(
// OLD - String.Format("{0}", Calculate.Circumference(4)));
foreach (Interface.ICalculate calculator in Calculators)
{
Console.WriteLine(
String.Format("{0}", calculator.Circumference(4)));
}
IEnumerable の System.Collections.Generic もインポートしました。
重要な変更は最初のものです。私が理解しているように、これにより、複数のアセンブリからパーツをインポートできるようになります。ただし、次のエラーが表示されます。
No valid exports were found that match the constraint
この時点では、複数の「プラグイン」アセンブリを追加していません。まだ持っているだけです。
完全を期すために、「プラグイン」クラス ライブラリ内の彼のエクスポート定義 (私は触れていません) を次に示します。
[Export(typeof(Interface.ICalculate))]
public class Calculate : Interface.ICalculate
何か案は?ここで頭をかいてます。私は SO と MEF フォーラムを検索しましたが、私を啓発するものを見つけることができました。
VS 2008 SP1 (2010 ベータ版はインストールされていません) と最新の System.ComponentModel.Composition アセンブリ (2009.26.8.0) を使用しています。