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.

È stato utile?

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.

  1. System.AddIn
  2. 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

MEF è open source su CodePlex

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)

controlli anche altri top votato domande sul tag mef a SO

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top