2017-03-08 1 views
1

Avec la réflexion, je peux charger une seule DLL. Mais avec MEF tous les plugins dans le répertoire sont rouges. Single .dll avec MEF

Assembly testAssembly = Assembly.LoadFile(@"c:\Test.dll"); 
Existe-t-il un moyen avec MEF de faire la même chose?

Je peux le faire:

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

mais ceci est une base sur la la liste complète des plug-ins.

Amitiés

Dipke

Répondre

1

Les catalogues sont le mécanisme MEF utilise pour trouver des plugins - et ils sont très flexibles.

Vous utilisez vraisemblablement un DirectoryCatalog?

Si oui, vous pouvez utiliser le overload of the constructor qui prend un modèle de recherche:

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

Vous pouvez également utiliser le AssemblyCatalog, qui vous permettra de spécifier que l'assemblage à utiliser.

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

Enfin, si vous voulez vraiment un comportement spécifique (plug-ins de charge à partir d'un appel de service Web, ou des trucs de fou comme ça), alors vous pouvez simplement mettre en œuvre votre propre ComposablePartCatalog.