2011-10-06 6 views
6

Ho una console basata un'applicazione MEF dell'ospite (CompositionContainer) di cui carica assiemi di plugin disponibili in base al parametro della riga di comando, ad esempio:Utilizzando metodi disponibili in plugin1 in plugin2 via MEF

app.exe plugin1 

caricherà il host (app.exe) e plugin1. La soluzione VS è strutturata in modo tale che ogni plugin abbia il proprio progetto (quindi è un proprio assembly).

Esiste una raccolta di plug-in, alcuni dei quali hanno l'opportunità di riutilizzare il codice. Ad esempio, ad esempio plugin1 ha un metodo CopyFiles(string fileName) e la stessa funzionalità deve essere utilizzata da plugin2.

Ora, in un'applicazione di console tradizionali si potrebbe aggiungere un riferimento a plugin1.dll e utilizzando namespace che andare a questo proposito è il commercio di riutilizzo.

Sono curioso di sapere se esiste un modo "MEF", se lo si desidera, di implementare questo riutilizzo. Quindi, qualcosa sulla falsariga di creare un oggetto di plugin1 in plugin2 aggiungendo un attributo all'interfaccia esportabile plugin1's e lasciare che il MEF si occupi del resto. È possibile? E se sì, come?

O c'è un approccio migliore che si dovrebbe prendere quando si progettano tali applicazioni? Bonus voodoo per qualsiasi indicazione su risorse e spiegazioni utili all'apprendimento.

Grazie!

risposta

2

Se il metodo che si desidera condividere è plugin1, è necessario Exportplugin1. È anche possibile utilizzare il metodo Export se si desidera condividere tale metodo.

plugin2Import plug1. MEF si prenderà cura di tutto il resto. Se stai ottenendo i tuoi assembly dalla riga di comando e creando un AssemblyCatalog per plugin1, dovrai anche dirglielo su plugin2 e inserirlo in uno AggregateCatalog, o metterli tutti in una directory e usare uno DirectoryCatalog (potresti passare nome della directory sulla riga di comando).

Il MEF Programming Guide copre scenari simili.

Ci sono anche Hands-On-Labs per MEF nello Visual Studio 2010 and .NET Framework 4 Training Kit che sono utili.

Problemi correlati