Frage

ich ein Programm haben, dass ich eine grundlegende Plugin-Architektur zu verwenden, entwickelt. Effektiv, wenn das Programm geladen wird es verwendet Reflektion, das Verzeichnis für DLL zu suchen, die eine bestimmte Schnittstelle passen und dann lädt sie. Es scheint nun, dass die aktuelle Liste der Plugins alle ist, die verwendet wird.

Daher ist meine derzeitige Praxis der Prüfung der DLL-Dateien nach wie vor die beste Praxis, oder gibt es bessere Möglichkeiten, um jedes DLL zu laden?

Danke.

War es hilfreich?

Lösung

Aus Ihrer Frage sieht es aus wie Sie gebaut haben (oder versuchen zu bauen) Ihre eigene Art von Plugin-Architektur. Es ist nicht so eine gute Idee, da .NET bereits hat, was Sie suchen.

.NET kommt mit 2 Möglichkeiten, um Plug-in zu ermöglichen.

  1. System.AddIn
  2. MEF - Managed Extensibility Framework

(1) System.AddIn - ich habe viel über sie kaum zu hören / lesen. Aber man kann hier auf ein paar Artikel einen Blick:
System.AddIn Artikel von MSDN Magazin <- Beachten Sie das Jahr 2007 < br> System.AddIn Tools und Beispiele auf Codeplex

(2) Jetzt, MEF, MEF ist einfach genial! Es ist eine gute und einfache Möglichkeit, eine Plugin-Architektur in das System einzuführen. MEF ist auch ein Teil von Silverlight und Visual Studio 2010 verwendet es. Ich kann sehen, Sie wollen dynamisch DLLs mit Plugins laden, mit MEF Sie Ihre Anwendung so gestalten können die Klassen, die Sie mit Ihrem Software-Paket können in Ihrer eigenen Baugruppe (.exe) und dann können Sie MEF verwenden, um dynamisch Look DLLs in die Zukunft, die Klassen haben, die Sie benötigen. Das gesamte Verfahren selbst ist sehr einfach in MEF.

Mike Taulty hat eine brillante Video-Serie auf MEF

MEF Artikel bei Codeproject - Teil 1 MEF Artikel bei Codeproject - Teil 2

MEF ist Open Source auf Codeplex

Ich glaube, Sie persönlich sollte geht mit MEF, seinem neuen, einfach und sogar Visual Studio verwendet es auch, so dass Sie auf einen Blick nehmen:
Die Wahl zwischen MEF und MAF (System.AddIn)

Do Besuche andere Top-gestimmte Fragen auf dem MEF-Tag am SO

Andere Tipps

Sie können die Filesystemwatcher-Klasse verwenden, um ein Verzeichnis für Änderungen zu überwachen.

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;
}

Dann wird es eine Plug-and-Play-Affäre:)

siehe MEF Es ist eine sehr mächtige architektonische Lösung für die Erstellung von Plugin-Design.

Das ist gut. Alternativ können Sie festlegen, welche Baugruppen in der Konfigurationsdatei auch geladen werden, wenn Sie das Gefühl, dass in den zahlreichen DLLs mit dem Ordner Ihrer Anwendung beeinträchtigen könnten und es könnte einige Sicherheitsproblem sein, wie jemand eine DLL in diesem Ordner schieben könnte.

  • Da Plugin bedeuten: „Sie donot die DLL zu laden im Voraus wissen,“ gibt es keine Möglichkeit zu früh binden ths „unknown-DLL“ Sie haben für Interface-Implementierung zu laden und suchen und eine Art verwenden die späte Bindung .
  • „Suche in der DLL“ anstelle von „Bearbeiten eines configfile“ ist sehr anwenderfreundlich. in den meisten Fällen ist die Suche dll seit seinem nicht ein Performance-Problem nur einmal beim Programmstart durchgeführt.

Ich denke, Ihr Design in Ordnung ist.

Für Ihr Szenario Ich empfehle, mit MEF und seiner Directory Plugins aus einem bestimmten Ordner zu laden. Wenn Sie zusätzlich die Filesystemwatcher konfigurieren und aktualisieren Directory auf Ordner ändern, dank Neuzusammensetzung Funktion von MEF, werden Sie in der Lage sein, neuen Plugins im laufenden Betrieb zu ziehen! BTW, können Sie eine schön Neuzusammensetzung Probe sehe ich für eine meiner MEF Gespräche tat .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top