C# DLL du plugin-architecture
J'ai un programme que j'ai développé pour l'utilisation d'un plugin de base de l'architecture. Effectivement, lorsque le programme se charge elle utilise la réflexion pour rechercher le répertoire dll qui correspondent à une certaine interface, puis charge.
Il apparaît aujourd'hui que la liste des plugins est celle qui sera utilisée.
Donc, c'est de ma pratique courante de vérifier les fichiers dll toujours la meilleure pratique, ou il y a de meilleures façons de charger les dll?
Grâce.
pouvez-vous un peu de clarifier votre question avec votre exemple de code? Je vous pose cette question parce que j'avais déjà développé une très similaires d'une architecture de plugin qui a été la numérisation de la dll dans un répertoire du plugin. Si nous pouvons voir votre source, je pense que nous pouvons donner des conseils.
Voulez-vous dire Par "dll qui correspondent à une certaine interface" que vous chargez toujours tous les plugin assemblées et d'examiner des CLASSES à l'encontre de l'interface? Utilisez-vous reflectionOnly chargement ? Pourriez-vous être plus spcific sur "la liste des plugins est celle qui sera utilisée". Voulez-vous dire que vous ne trouverez pas de plugins à tous, même après les assemblages sont chargés avec succès ? "y at-il de meilleures façons de charger la dll". Par rapport à quoi exactement? Sujet intéressant, mais ne peut pas aider sans plus d'informations.
J'aimerais bien demander à quelqu'un qui a le pouvoir de changer le titre! OMI basé sur ce que l'OP ce que le son tout à fait trompeur. J'ai utilisé la question.
oublié que les OP peuvent modifier aussi! @Darren je ne pense pas que le titre de votre question est très claire! =P
aucune des réponses ci-dessous correct? Si donc sélectionné un s'il vous plaît 😛
Voulez-vous dire Par "dll qui correspondent à une certaine interface" que vous chargez toujours tous les plugin assemblées et d'examiner des CLASSES à l'encontre de l'interface? Utilisez-vous reflectionOnly chargement ? Pourriez-vous être plus spcific sur "la liste des plugins est celle qui sera utilisée". Voulez-vous dire que vous ne trouverez pas de plugins à tous, même après les assemblages sont chargés avec succès ? "y at-il de meilleures façons de charger la dll". Par rapport à quoi exactement? Sujet intéressant, mais ne peut pas aider sans plus d'informations.
J'aimerais bien demander à quelqu'un qui a le pouvoir de changer le titre! OMI basé sur ce que l'OP ce que le son tout à fait trompeur. J'ai utilisé la question.
oublié que les OP peuvent modifier aussi! @Darren je ne pense pas que le titre de votre question est très claire! =P
aucune des réponses ci-dessous correct? Si donc sélectionné un s'il vous plaît 😛
OriginalL'auteur Darren Young | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
De votre question, il semble que vous avez créé (ou sont en train de construire) votre propre architecture de plugin. Ses pas une bonne idée depuis .NET a déjà ce que vous cherchez.
.NET est livré avec 2 façons de permettre à des plugins.
(1) Système.Addin - j'ai à peine entendu/lu beaucoup à ce sujet. Mais vous pouvez prendre un coup d'oeil à quelques articles ici:
Système.Complément de l'article de MSDN magazine <- Note de l'Année 2007
Système.Complément des outils et des exemples sur Codeplex
(2) Maintenant, la MEF MEF est tout simplement génial! C'est un grand et facile à introduire une architecture de plugin dans votre système. MEF est également une partie de Silverlight et Visual Studio 2010 l'utilise. Je vois que vous voulez charger les dll avec des plugins de manière dynamique, avec le MEF, vous pouvez concevoir votre application dans ce sens, les catégories en package avec votre logiciel peut être dans votre propre assemblée.exe) et puis vous pouvez utiliser MEF dynamiquement look pour les dll dans l'avenir qui permettra d'avoir des classes que vous avez besoin. L'ensemble de la procédure elle-même est très simple dans la MEF.
Mike Taulty a une brillante série de vidéos sur MEF
MEF Article sur Codeproject - Partie 1
MEF Article sur Codeproject - Partie 2
MEF est Open Source sur Codeplex
Personnellement, je pense que vous devrait aller avec le MEF, son nouveau, facile et même visual studio utilise, même ainsi, vous pouvez prendre un coup d'oeil à:
Le choix entre le MEF et le MAF (Système d'.AddIn)
Faire vérifier d'autres haut voté questions sur le forum de la balise, DONC
OriginalL'auteur gideon
Vous pouvez utiliser la classe FileSystemWatcher pour surveiller un répertoire pour les modifications.
Puis il devient un plug-and-play affaire 🙂
OriginalL'auteur The_Butcher
reportez-vous à MEF
C'est un très puissant solution architecturale pour la création de Plugin dessins.
OriginalL'auteur Sasha Reminnyi
C'est bon. Alternativement, vous pouvez définir les assemblées pour être chargé dans le fichier de config aussi, si vous vous sentez que le fait d'avoir de nombreux Dll dans le dit dossier peut nuire à votre demande et il pourrait y avoir un problème de sécurité que n'importe qui peut pousser un DLL dans le dossier.
OriginalL'auteur Kangkan
Je pense que votre design est ok.
OriginalL'auteur k3b
Pour votre scénario, je recommande l'utilisation du MEF et de ses DirectoryCatalog de charger les plugins à partir d'un dossier particulier. Si vous avez également configurer le système de fichiers de l'observateur et de l'actualisation DirectoryCatalog sur le dossier du changement, grâce à la recomposition de la fonctionnalité de la MEF, vous serez en mesure de tirer de nouveaux plugins lors de l'exécution! BTW, vous pouvez voir une nice recomposition de l'échantillon que j'ai fait pour un de mes MEF parle.
OriginalL'auteur pwlodek