Ho alcuni plugin come file dll. La mia applicazione carica la DLL e funziona correttamente. ma quando provo a eliminare il vecchio plugin e lo sostituisco con un nuovo plugin non mi permette di farlo. come è stato caricato dall'applicazione. Ho scoperto che usando appdomain possiamo farlo. ma non sono in grado di trovare una soluzione in cui viene utilizzato mef.Scaricamento di un file dll in mef
Ho bisogno di un codice che può essere eseguito su mef. Di seguito è riportato il mio codice che viene utilizzato per caricare i plugin.
//Creating an instance of aggregate catalog. It aggregates other catalogs
var aggregateCatalog = new AggregateCatalog();
//Build the directory path where the parts will be available
var directoryPath = "Path to plugins folder";
//Load parts from the available dlls in the specified path using the directory catalog
var directoryCatalog = new DirectoryCatalog(directoryPath, "*.dll");
//Add to the aggregate catalog
aggregateCatalog.Catalogs.Add(directoryCatalog);
//Crete the composition container
var container = new CompositionContainer(aggregateCatalog);
// Composable parts are created here i.e. the Import and Export components assembles here
container.ComposeParts(this);
ci dovrebbe essere una soluzione a questo. ho sentito che questa sarà la prossima uscita di mef. non lo so è vero o no. –
@fhnaseer No, almeno non in qualsiasi cosa mostrata pubblicamente finora. Questo è davvero al di fuori del caso di utilizzo previsto per MEF, quindi dubito che accadrà lì. L'unico modo supportato per rimuovere un assembly nel CLR è quello di scaricare l'intero AppDomain. Il MEF, essendo una biblioteca, non può "aggirare" quello. –
bene allora qual è il significato di "AllowRecomposition = true" in ImportMany. Se lo scrivo o no il comportamento è lo stesso. –