2017-03-08 34 views
1

使用反射,我可以加載單個的dll。使用MEF的單個.dll

Assembly testAssembly = Assembly.LoadFile(@"c:\Test.dll"); 

但是在MEF中,目錄中的所有插件都是紅色的。 有沒有與MEF一樣的做法?

我可以這樣做:

public IPlugn Load(string name) 
    { 
     return Plugins 
      .Where(l => l.Name.Equals(name)) 
      .FirstOrDefault(); 
    } 

,但是這是一個基於插件的整個列表上。

親切的問候

Dipke

回答

1

目錄是MEF用於查找插件機制 - 它們是非常靈活的。

你大概在使用DirectoryCatalog?

如果是這樣,你可以使用,需要一個搜索模式的overload of the constructor

var catalog = new DirectoryCatalog("C:\\", "Test.dll"); 

或者,你可以使用AssemblyCatalog,這將讓您只需指定要使用的組件。

var catalog = new AssemblyCatalog(Assembly.LoadFile("C:\\Test.dll")); 

最後,如果你想要的任何真正的特定行爲(從Web服務調用,或類似的瘋狂的東西加載插件),那麼你可以實現自己的ComposablePartCatalog