Question

J'ai un programme que je développé pour utiliser une architecture de plug-in de base. En effet, lorsque les charges de programme, il utilise la réflexion pour rechercher dans le répertoire des dll qui correspondent à une certaine interface, puis les charge. Il semble maintenant que la liste actuelle des plug-ins est tout ce qui sera utilisé.

Par conséquent, ma pratique actuelle de vérifier les fichiers dll toujours les meilleures pratiques, ou y at-il de meilleures façons de charger chaque dll?

Merci.

Était-ce utile?

La solution

De votre question, il semble que vous avez construit (ou essayez de construire) votre propre type d'architecture plug-in. Ce ne est pas une bonne idée puisque .NET a déjà ce que vous cherchez.

.NET est livré avec 2 façons de permettre aux plug-ins.

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

(1) System.AddIn - J'ai à peine entendu / lu beaucoup à son sujet. Mais vous pouvez jeter un oeil à quelques articles ici:
System.AddIn article du magazine MSDN <- Note l'année 2007 < br> System.AddIn outils et exemples à Codeplex

(2) Maintenant, MEF, est tout simplement génial MEF! Son une grande et facile d'introduire une architecture de plug-in dans votre système. MEF est également une partie de Silverlight et Visual Studio 2010 utilise. Je peux voir que vous voulez charger dll avec les plugins dynamiquement, avec MEF vous pouvez concevoir votre application de telle manière les classes que vous paquet avec votre logiciel peut être dans votre propre assemblage (.exe), puis vous pouvez utiliser MEF pour regarder de façon dynamique pour dll à l'avenir qui auront des cours que vous avez besoin. Toute la procédure elle-même est très simple MEF.

Mike Taulty a une série vidéo brillante MEF

Article à CodeProject MEF - Partie 1 à l'article MEF CodeProject - Partie 2

MEF est Open Source sur CodePlex

Personnellement, je pense que vous devrait aller avec MEF, son nouveau, facile et même des utilisations studio visuels, même si vous pouvez jeter un oeil à:
Le choix entre MEF et MAF (System.AddIn)

faire vérifier d'autres questions sur le dessus a voté la balise au SO mef

Autres conseils

Vous pouvez utiliser la classe FileSystemWatcher pour surveiller un répertoire des changements.

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

Ensuite, il devient un plug and affaire jeu:)

MEF Il est une solution architecturale très puissante pour la création de plug-in conçoit.

Ce qui est bon. Vous pouvez également définir les ensembles à charger dans le fichier de configuration également, si vous vous sentez que d'avoir de nombreuses DLL dans ledit dossier pourrait affecter votre application et il pourrait y avoir une question de sécurité que tout le monde peut pousser une DLL dans ce dossier.

  • Depuis plugin de moyenne: « vous DONOT connaissez le dll à la charge à l'avance » il n'y a aucun moyen de début THs lier « inconnu-dll » vous devez charger et rechercher la mise en œuvre d'interface et d'utiliser une sorte de liaison tardive .
  • « Recherche dll » au lieu de « l'édition d'un configfile » est très facile d'utilisation. dans la plupart des cas dll recherche n'est pas un problème de performance depuis sa fait qu'une seule fois au démarrage du programme.

Je pense que votre conception est ok.

Pour votre scénario, je recommande d'utiliser MEF et son DirectoryCatalog pour charger des plugins à partir d'un dossier particulier. Si vous configurez en outre le veilleur de système de fichiers et rafraîchissez DirectoryCatalog sur le changement de dossier, grâce à fonctionnalité recompositions de MEF, vous serez en mesure de tirer de nouveaux plugins dans l'exécution! BTW, vous pouvez voir un bel échantillon de recompositions je l'ai fait pour un de mes entretiens de MEF .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top