Je vais faire une application de bureau pouvant être ajoutée / supprimer des modules en ajoutant / enlevant des dlls (chaque module géré par une DLL) ou via un fichier de configuration. P>
Mon objectif est d'avoir une application comme Eclipse IDE, il y aura des fonctions de base (Eclipse Basic) comme le début, puis d'autres fonctions peuvent être installées lorsque des plugins doivent être une application entièrement fonctionnelle. P>
Passer une certaine recherche et se retrouver avec Cadre d'extensibilité géré (MEF) . Le problème est que le MEF semble suspendu à soutenir pendant une longue période et pas de nombreuses applications l'utilisent. Quelqu'un pourrait-il me dire pourquoi et devrais-je continuer avec ça? J'ai de nombreuses expériences dans Winform, mais WPF. P>
S'il y a d'autres approches, merci de me le faire savoir aussi. P>
4 Réponses :
Vous devez regarder prisme . C'est un cadre open-source pour construire des applications XAML couplées, assemblées et testables de manière lâche, de WPF, Windows 10 UWP et Xamarin. P>
Il prend en charge l'ajout de modules à l'aide de la configuration, comme indiqué dans cet exemple: https://github.com/prismLibrary/prism-samples-wpf/tree/master/07-Modules%20-%20appconfig P>
Merci. J'ai découvert ce cadre mais comme je l'ai déjà mentionné, je n'ai aucune expérience dans le WPF, donc je préfère mef.
MEF et WPF sont totalement non liés.
@Cragin: Oui, je savais. Je veux dire que Prism travaille avec WPF
@Tutran: Quelle est exactement votre question?
mef est en fait un bon moyen pour une telle architecture d'application. Dire "pas tellement d'applications utilise MEF" n'est pas tout à fait correcte, car l'application (probablement) la plus grande et la plus connue utilisée à l'aide de MEF est Visual Studio (à partir de la version 12.0 - 2013). P>
Maintenant, il y a un malentendu à propos de MEF. Il y a 3 versions (saveurs) de MEF (Eh bien, de trois et demi). Cela confond souvent les gens. P>
Permettez-moi d'essayer d'expliquer: p>
System.componentModel.comPosition code>.
- avantages em>: une partie du cadre .NET; très flexible et dynamique li>
- contre em>: (relativement) lent; Pas de développement supplémentaire Li>
ul> li>
-
mef 2.0 strong>, également connu sous le nom de Nuget Mef. Microsoft voulait une version beaucoup plus rapide pour les applications Windows Phone et n'avait pas besoin de cette approche entièrement dynamique. Premier publié uniquement pour les plates-formes mobiles, alors mis à la disposition d'autres cadres. Il peut être obtenu via Nuget ou utiliser .NET CORE FX. Espace de noms System.composition code>.
- pros em>: rapide; maintenant une partie de .NET CORE FX LI>
- contre em>: relativement "statique"; Mauvaise performance de démarrage li>
ul> li>
-
MEF 1.0 + strong>, parfois appelé meudo 2.0. C'était la mise à jour du MEF 1.0 publiée avec .NET Framework 4.5. Avantages et inconvénients voir MEF 1.0. LI>
-
vs-mef strong>, une saveur spéciale de MEF utilisée dans Visual Studio. Peut être obtenu via Nuget ; Voir aussi Github . Espace de noms Microsoft.visualstudio.composition code>.
- pros em>: combine de bonnes performances du MEF 2.0 avec presque la même flexibilité que le MEF 1.0; est sous Développement actif Li>
- contre em>: n'a pas de recomposition dynamique li>
ul> li>
ul>
Explication très utile, vous avez sauvé mes jours.
second strong>, j'ai accepté avec @ mm8. Prisme est un bon choix. Mais vous pouvez voir WAF) . P> Comme écrit dans la description , Soutien de la CAF: P> voir Architecture modulaire Section Pour plus de détails sur la configuration de modularité. WAF utilise Mef sous le capot. Voir un bon exemple pour configurer https://github.com/jbe2277/waf/blob/master/src/system.waf/samples/informationmanager/assembler/app.xaml.cs P> Partie du code Utilisation de MEF et WAF à partir de l'exemple: p>
Si vous souhaitez éviter la dépendance sur l'une des cadres d'extensibilité telles que le MEF ou le PRISM, vous pouvez également utiliser une réflexion nu avec le chargement de l'assemblage. Voici comment cela fonctionnerait: p>
Vous pouvez en apprendre davantage sur cette approche dans les pages de documentation suivantes: p>
Cela peut sembler beaucoup à apprendre, mais c'est assez simple après un certain temps. P>
J'ai bien peur que cela soit à la fois trop large et aussi demander des outils. Les deux ne sont pas autorisés ici.
Je cherche une architecture basée sur une plug-in similaire, j'ai un coup d'œil au MAF: docs.microsoft.com/en-us/dotnet/framework/wpf/app-Devopmen T / ...
Cela n'a pas non plus été en développement depuis un jour, mais il est disponible et assez strie d'utiliser. Faites attention, cela ne vous protège pas du plugin qui écrase votre hôte. Vous pouvez contourner cependant en lançant chaque plugin dans son propre processus. Il y a un lien utile dans la présente pour des choses similaires, consultez ceci: MSDN .microsoft.com / fr-US / US / Magazine / DN519924.aspx
Enfin, un lien de si peut fournir plus de perspicacité (et plus de liens) Stackoverflow.com/Questtions/835182/...