plugin-architettura di C # DLL
-
13-10-2019 - |
Domanda
Ho un programma che ho sviluppato per utilizzare un'architettura di base plugin. In effetti, quando i carichi di programma che utilizza la riflessione per cercare la directory per dll che corrispondono a una determinata interfaccia e poi li carica. Ora sembra che l'attuale elenco dei plug-in è tutto ciò che verrà utilizzato.
Quindi, è il mio attuale pratica di controllo dei file dll ancora la migliore pratica, o ci sono modi migliori per caricare ogni dll?
Grazie.
Soluzione
Dalla tua domanda sembra che hai costruito (o sta tentando di costruire) il proprio tipo di architettura a plugin. La sua non è come una buona idea, dato che .NET è già quello che stai cercando.
.NET viene fornito con 2 modi per consentire plugin.
- System.AddIn
- MEF - gestito Extensibility Framework
(1) System.AddIn - Ho a malapena sentito / letto molto su di esso. Ma si può dare un'occhiata a un paio di articoli qui:
System.AddIn articolo della rivista MSDN <- Nota dell'Anno 2007 < br>
System.AddIn strumenti ed esempi a Codeplex
(2) Ora, MEF, MEF è semplicemente impressionante! Il suo un ottimo modo facile e di introdurre un'architettura a plugin nel vostro sistema. MEF è anche una parte di Silverlight e Visual Studio 2010 utilizza. Vedo che si desidera caricare DLL con i plugin in modo dinamico, con MEF è possibile progettare la vostra applicazione in modo tale le classi che pacchetto con il software può essere nella vostra propria assemblea (.exe) e quindi è possibile utilizzare MEF per guardare in modo dinamico per DLL in futuro che avranno classi di cui avete bisogno. L'intera procedura è molto semplice nella MEF.
Mike Taulty ha una serie di video brillante sul MEF
MEF Articolo a CodeProject - Parte 1 MEF Articolo a CodeProject - Parte 2
Io personalmente credo che si dovrebbe andare con MEF, il suo nuovo, facile e anche Studio utilizza visivi, anche in modo da poter dare un'occhiata a:
Scelta tra MEF e MAF (System.AddIn)
Altri suggerimenti
È possibile utilizzare la classe FileSystemWatcher per monitorare una cartella per le modifiche.
publicvoid CreateWatcher()
{
//Create a new FileSystemWatcher.
FileSystemWatcher watcher = newFileSystemWatcher();
//Set the filter to only catch DLL files.
watcher.Filter = "*.dll";
//Subscribe to the Created event.
watcher.Created += new
FileSystemEventHandler(watcher_FileCreated);
//Set the path to C:\Temp\
watcher.Path = @"C:\Temp\";
//Enable the FileSystemWatcher events.
watcher.EnableRaisingEvents = true;
}
Poi diventa un plug and play vicenda:)
MEF Si tratta di una soluzione architettonica molto potente per la creazione di plug-progetta.
Questo è un bene. In alternativa, è possibile definire quali assemblee per essere caricato nel file di configurazione anche, se si sente che avere numerosi DLL nel detto cartella potrebbe influenzare la domanda e ci potrebbe essere qualche problema di sicurezza come chiunque potrebbe spingere una DLL in quella cartella.
- Dal plugin di media: "donot conosce la dll a carico in anticipo" non v'è alcun modo per THS legano primi "unknown-dll" è necessario caricare e cercare implementazione di interfaccia e utilizzare una sorta di tardiva .
- "Ricerca la dll" invece di "modifica di un configfile" è molto facile da usare. nella maggior parte dei casi la ricerca dll non è un problema di prestazioni dal momento che il suo fare solo una volta all'avvio del programma.
Credo che il vostro disegno è ok.
Per lo scenario mi consiglia di utilizzare MEF e la sua DirectoryCatalog di caricare i plugin da una particolare cartella. Se si configura inoltre il sistema di osservatore del file e aggiornare DirectoryCatalog sul cambiamento della cartella, grazie alla funzione di ricomposizione del MEF, si sarà in grado di tirare nuovi plugin in fase di esecuzione! A proposito, si può vedere un campione bello ricomposizione ho fatto per uno dei miei colloqui MEF .