2011-02-24 3 views
3

mefを使用して特定のインタフェースを実装するすべての型をインポートし、実行時にこのインタフェースを指定するクラスを作成できますか? (私は、輸出と実装をタグ付けする必要があります知っている)Mefは、実行時に指定されたインタフェースを実装するすべての型をインポートします。

使用例:

IEnumerable<IExcitingClass> excitingClasses = ClassImporter<IExcitingInterface>.ImportAllFrom(specifyDirectory); 

は、この可能ですか?

答えて

1

DirectoryCatalogを使用してコンテナを作成し、container.GetExportedValues<IExcitingClass>を呼び出すことができます。それはあなたが欲しいものですか?

+0

私は行方不明でした! – GreyCloud

1

実行時には、文字列を使用してインターフェイスを指定することしかできませんでした。

public IEnumerable<object> GetAllInheritors(string interfaceName) 
    { 
     Assembly assembly = this.GetType().Assembly; 
     foreach (var part in Container.Catalog.Parts) 
     { 
      Type type = assembly.GetType(part.ToString()); 
      if (type != null) 
       if (type.GetInterface(interfaceName) != null) 
       { 
        yield return part.CreatePart().GetExportedValue(part.ExportDefinitions.First()); 
       } 
     } 
    } 
関連する問題