Architecture du plugin

J’essaie de comprendre l’architecture du plugin. Plus précisément celui utilisé dans l’implémentation de Windows Live Writer. Je fais référence au style dans lequel vous pouvez configurer / activer / désactiver / append / supprimer des fonctionnalités supplémentaires en ajoutant / supprimant des DLL (+ config).

J’espère voir quelque chose de similaire pour une application Web. Quelqu’un peut-il me diriger s’il vous plaît dans la bonne direction?

Merci d’avance.

-SK

Regardez cet article . En résumé, vous devez effectuer les tâches suivantes à un niveau élevé.

  1. Définir une interface que les plugins doivent implémenter
  2. Créez un sous-répertoire avec des permissions spécifiques pour que les DLL du plug-in habitent
  3. Définissez une section de configuration ou un fichier spécifiant le type à charger dynamicment à partir de la DLL du plugin.
  4. Chargez les DLL depuis la configuration et le répertoire du plugin dans un sandbox sécurisé à l’aide d’un AppDomain

J’espère que ça aide.

Votre question portait la mention ASP.NET, mais je n’ai rien vu de spécifique à ASP.NET dans votre question. ASP.NET enfichable est possible, mais difficile en utilisant System.AddIn, alias MAF. J’ai réussi à créer une validation de principe du site Web en 4 jours environ.

http://suburbandestiny.com/Tech/?p=585

http://suburbandestiny.com/Tech/?p=588

La bonne chose était enfin de pouvoir exécuter une DLL Add-In dans Minimum Trust, tandis que l’application hôte s’exécutait en confiance totale ou moyenne.

J’ai finalement conclu que System.AddIn avait été créé pour résoudre les problèmes AddIn de Microsoft Office, et non les problèmes de création d’un AddIn pour un web.app.

MEF est censé être la nouvelle chose shinye à faire des modèles de type add-in, mais je n’ai aucune expérience avec elle. MEF était censé être une solution générale et pas seulement résoudre des problèmes au sein de l’équipe MS Office. C’est donc un peu plus prometteur.

Fondamentalement, vous devez utiliser AssemblyLoader pour charger un assemblage à l’exécution à partir d’un répertoire spécifié, puis créer une instance et l’appeler.

Assembly assembly = Assembly.LoadFrom("myAssembly.dll"); Type type = assembly.GetType("theType"); object myInstance = Activator.CreateInstance(type); 

Cela fonctionne mieux si tous vos plugins implémentent une interface qui expose une certaine méthode … comme Load (). Ensuite, vous pouvez faire:

 myInstance.Load() 

Pourvu que vous utilisiez myInstance sur votre interface.

La détection automatique d’un plug-in, simplement en ajoutant une ou plusieurs DLL, est encapsulée dans l’espace de noms System.Addin. Chaque fois que vous redémarrez le programme, il appenda / supprimera les plugins donnés. Comme vous pouvez le constater, ce qu’il ne fera pas, c’est d’append / supprimer un plugin tant que le programme est en cours d’exécution. Si vous souhaitez cette fonctionnalité, vous devrez augmenter le code System.Addin en ajoutant votre propre mécanisme d’événement de fichier qui vous informe qu’une DLL a été ajoutée ou supprimée. Bien sûr, si vous souhaitez supprimer une DLL pour quelque chose qui est déjà en cours d’exécution, cette DLL ne doit pas comporter de verrou de fichier. Pour ce faire, chaque DLL doit être exécutée avec ShadowCopy activé.