2009-04-11 10 views
8

Quelles sont les meilleures pratiques pour créer un site, avec la possibilité de développer des plugins pour cela?comment créer un site Web ASP.Net enfichable?

Comme si vous vouliez créer un module de blog et que vous souhaitiez que des utilisateurs ou des co-développeurs ajoutent des plugins pour étendre les fonctionnalités de ce module.

Mise à jour: Merci pour les réponses ultra rapides, mais je pense que c'est trop tuer pour moi. N'y a-t-il pas une solution plus simple, comme j'ai vu le système de création de plugins blogengine est que vous avez juste à décorer le plugin de classe avec [Extension].

Je suis un peu développeur de base, donc je pensais à la classe de base, l'héritage, les interfaces, qu'en pensez-vous?

+0

L'architecture de plug-in n'est PAS simple. Si c'était simple, il serait inclus par conception dans chaque pile de logiciel et langage de programmation. Chaque plugin doit communiquer avec le programme de base d'une manière définie (sinon ils ne seraient que des programmes séparés). – Aron

Répondre

12

Modifier

J'ai complètement réécrit ma réponse en fonction de votre édition de question. Permettez-moi de vous montrer à quel point il est facile de mettre en œuvre une architecture de plugin avec seulement les étapes minimales.

Étape 1: Définissez une interface que vos plugins implémenteront.

namespace PluginInterface 
{ 
    public interface IPlugin 
    { 
     string Name { get; } 
     string Run(string input); 
    } 
} 

Étape 2: Création d'un plug-in qui implémente IPlugin.

namespace PluginX 
{ 
    using PluginInterface; 

    public class Plugin : IPlugin 
    { 
     public string Name 
     { 
      get { return "Plugin X"; } 
     } 

     public string Run(string input) 
     { 
      return input; 
     } 
    } 
} 

Étape 3: Lancez le plug-in.

namespace PluginTest 
{ 
    using System; 
    using System.IO; 
    using System.Runtime.Remoting; 
    using PluginInterface; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      string pluginFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PluginX.dll"); 
      ObjectHandle handle = Activator.CreateInstanceFrom(pluginFile, "PluginX.Plugin"); 

      IPlugin plugin = handle.Unwrap() as IPlugin; 

      string pluginName = plugin.Name; 
      string pluginResult = plugin.Run("test string");   

     } 
    } 
} 

Gardez à l'esprit, ce n'est que l'exemple de base, le plus simple d'un architechure de plug-in. Vous pouvez également faire des choses telles que

  • créer un hôte de plug-in pour lancer votre plugin à l'intérieur de son propre AppDomain
  • choisir soit des interfaces, classes abstraites ou des attributs pour décorer vos plugins avec
  • réflexion utilisation, interfaces , Thunks ou délégués IL-émis pour obtenir le travail de liaison tardive fait

si votre conception le dicte.

+1

merci l'homme, c'est exactement ce que je cherchais :) – DevMania

1

Cela ressemble à un travail pour le Managed Extensibility Framework de Microsoft. C'est dans une version de prévisualisation pour le moment mais il semblerait que ce soit un meilleur pari que de lancer votre propre framework pour cela. Il y a des liens vers des guides sur la façon de l'utiliser sur le site.

2

Il est utile de séparer les perspectives techniques et architecturas:

  • Dans le niveau de code MEF (Managed Extensibility Framework) est un bon début. Here est un exemple simple.
  • Toute autre DI (Dépendance cadre d'injection) peut bien fonctionner à (c.-à-unité.)

Et il est bon de voir ce problème au niveau architectural:

Je pense que c'est rapide et efficace si vous lisez & essayez certains de ces cadres. Et ofcoz lire la source si vous trouvez quelque chose d'intéressant.

Modifier

si vous êtes à la recherche d'un moteur de blog extensible puis essayez Blog Engine premier. C'est de la communauté ASP.NET.

1

Si vous souhaitez voir une véritable application open source qui implémente cette architecture, jetez un oeil à DotNetNuke.

Questions connexes