LES APPLICATIONS MODULAIRES : Plug-In, Add-In, Add-on (2ème partie et fin)

Dans la 1ère partie de ce tutoriel nous avons vu comment mettre en place un système de plugin pour son application. Dans cette seconde partie nous ferons la même chose mais en utilisant MEF (Managed Extensibility Framework). Commençons sans plus tarder !

Etape 3 : Création des plugins

Ce n’est pas une erreur : en effet les étapes 1 et 2 sont les mêmes que les étapes 1 et 2 de la 1ère partie de ce billet.

Créons le 1er plugin :

  1. Ajoutez un nouveau projet basé sur le template Bibliothèque de classes à la solution et nommer le Plugin1.
  2. Ajoutez une référence au projet PluginContract.
  3. Sélectionnez la référence de projet et dans la fenêtre de propriété mettez Copie
    locale à false.
  4. Renommez la classe par défaut en Plugin1
  5. Faites-la implémenter l’interface IPlugin.
  6. Ajoutez une référence à System.ComponentModel.Composition
  7. Faites un import : using System.ComponentModel.Composition ; dans la classe Plugin1.
  8. Marquez la classe avec l’attribut d’export : Export(typeof(IPlugin))

Créons un autre plugin :

Répétez les étapes 1 à 6 en changeant Plugin1 par Plugin2.

Des explications s’imposent sur le rôle de l’attribut Export(typeof(IPlugin)) mais patientons jusqu’à la prochaine étape qui est juste en dessous.

Etape 4 : Création de l’application hôte

Nous devons charger dynamiquement les plugins au démarrage de l’application.

C’est ce que nous allons faire.

  1. Ajoutez un nouveau projet basé sur le template Application console à la solution et nommer le MyApp.
  2. Ajoutez une référence au projet PluginContract.
  3. Sélectionnez la référence de projet et dans la fenêtre de propriété mettez Copie
    locale à false.
  4. Ajoutez une référence à System.ComponentModel.Composition.
  5. Dans l’explorateur de solution, ajouter une nouvelle classe au projet puis nommez-la : PluginLoader.

Insérez le code ci-dessous :


Les explications :

Si vous avez suivis la 1ère partie de billet vous avez sûrement remarqué un changement énorme dans la classe PluginLoader.cs : elle est beaucoup plus simple et compréhensible et c’est grâce à l’attribut Export(typeof(IPlugin)) de l’étape 3. Cet attribut permet d’indiquer à notre plugin le type de contrat qu’il doit respecter. Ainsi dans notre classe PluginLoader nous n’avons qu’à lui indiquer le chemin à partir duquel il doit charger les plugins et il se charge tout seul de charger les bons plugins c’est-à-dire ceux qui respectent leur contrat.

  1. Dans la classe Program.cs ajoutez le code ci-dessous :

Etape 5 : Création d’un répertoire d’installation

Lorsque vous développez une application modulaire vous devez mettre tous vos plugins dans un dossier particulier qui se trouve généralement dans le dossier d’installation de votre application. Pour simuler ceci nous allons créer les dossiers suivants n’importe où sur notre disque :

MyApp
Plugins
PluginContract

Configuration des options de déploiement :

  1. Pour chacun des projets dans la solution, allez dans l’onglet Générer des propriétés du projet puis changez le chemin de sortie comme suit :
Projet Chemin
MyApp MyApp
Plugin1 MyApp\Plugins
Plugin2 MyApp\Plugins
PluginContract MyApp\PluginContract
  1. Ensuite générez la solution (F6)
  2. Dans l’explorateur de solution, définir MyApp comme projet de démarrage.
  3. Exécuter l’application (F5)

Si tout se déroule sans erreur vous obtiendrai cet écran :


Le même résultat que celui de la 1ère partie mais obtenu de façon beaucoup plus simple grâce à MEF.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s