2010-11-24 11 views
3

私はMEFを使用してDLLをロードする必要がありますが、読んでいるチュートリアルの情報は役に立ちませんでした。MEF DLLを1つずつロードする

This siteは、コードの一部を示しています(下に表示されています)。実際には何も説明していません。

private void LoadPlugins() { 
    var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
    var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
    batch.AddPart(this); 
    container.Compose(batch); 
} 

基本的には、私はRunメソッドとのインターフェイスを持っていて、そのインターフェイスをいくつかのDLLで実装しています。私は後だが

bob = LoadDll(dllPath); 
bob.Run(); 

は「ボブ」のタイプを指定する方法があり、この(擬似コード)のような何かを行うことができるようにすることですか、それが一般的なのでしょうか?もし誰かが私が本当に感謝することができます!

+0

どのようなものを読み込むのですか? MEFのポイントは、抽象/インタフェース定義以外の具体的な型については何も知らないことです。特定のDLLからインポートをロードすることが適切であると判断する方法はありますか? – arootbeer

+1

@arootbeer実際、それはMEFの使い方の1つですが、インスタンス化しようとしている具体的な型をすでに知っていれば完全に有効です。しかし、私はこのケースでの使用法は、OPが達成しようとしているものについては過度のものであるかもしれないと思います。アセンブリがどのタイプの型を公開するか(または型を公開するか)の実行時の検出が必要な場合、MEFはpefectです。 – SRM

答えて

1

あなたが望むのはMEFで達成できますが、かなり進歩しています。キャッシュされたカタログ(Codeplexサイトのサンプルを参照)を作成するか、CCIなどの別のメタデータリーダーを使用する必要があります。

MEFは、(mefの属性を検索するために)それらに反映するためにアセンブリを読み込みます。

関連する問題