2017-03-08 4 views
1

Mit Reflektion kann ich eine einzelne DLL laden.Single .dll mit MEF

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

Aber mit MEF sind alle Plugins im Verzeichnis rot. Gibt es einen Weg mit MEF das gleiche zu tun?

Ich kann dies tun:

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

aber dies ist auf der die ganze Liste der Plug-ins ein basiert.

Mit freundlichen Grüßen

Dipke

Antwort

1

Kataloge sind der Mechanismus MEF Hilfe von Plugins zu finden - und sie sind sehr flexibel.

Sie verwenden vermutlich einen DirectoryCatalog?

Wenn ja, können Sie die overload of the constructor verwenden, die ein Suchmuster nimmt:

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

Alternativ können Sie die AssemblyCatalog verwenden, die es Ihnen erlaubt, nur die Montage angeben zu verwenden.

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

Schließlich, wenn Sie ein wirklich spezifisches Verhalten (Last-Plugins von einem Web-Service-Aufruf, oder verrückte Sachen wie das) möchten, dann können Sie nur Ihre eigenen ComposablePartCatalog implementieren.