.NET 4で拡張可能な「ユーティリティ」コンソールアプリケーションを作成しようとしていますが、MEFを使用してこれを行うと、柔軟性と拡張性の点で最高の結果が得られると考えました。
そこで、MEFインターフェイスの設定を開始しました。
public interface IUtility
{
string Title { get; }
string Version { get; }
void Execute(UtilContext context);
}
次に、ほぼ同一の2つのテストプラグインを作成しました。これがどのように機能するかを確認するためです。
MEFプラグイン:
[Export(typeof(IUtility))]
public class Utility1 : IUtility
{
public string Title
{
get { return "Utility 1"; }
}
public string Version
{
get { return "1.0.0.0"; }
}
public void Execute(UtilContext context)
{
}
}
MEFプラグインの「ホスト」として機能するコンソールアプリは、次のようになります。
[ImportMany]
public IEnumerable<IUtility> _utilities { get; set; }
public void SetupMEF()
{
string directory = ConfigurationManager.AppSettings["Path"];
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(directory));
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
私はチェックしました-ディレクトリはapp.config
正しく読み取られており、ソリューションが構築された後、プラグインモジュール(* .dllファイル)がそこに存在します。この例外が発生するまでは、すべて問題ないようです。
System.Reflection.ReflectionTypeLoadExceptionが処理さ
れませんでしたメッセージ=1つ以上の要求されたタイプをロードできません。詳細については、LoaderExceptionsプロパティを取得してください。LoaderException:
アセンブリ'Utility1、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'のタイプ'Utility.Utility1'のメソッド'get_Version'には実装がありません
うーん....MEFはここで私に何を伝えようとしているのですか?そして、どうすればこの問題を解決できますか?何か考え、アイデア、指針はありますか?
Version
私は自分のプロパティを持っていることでいくつかの慣習を破りましたか?それはMEFによって予約されたものですか?