2009-04-11 18 views
8

¿Cuáles son las mejores prácticas para crear un sitio, con la capacidad de desarrollar complementos para él?cómo crear un sitio web ASP.Net conectable?

Al igual que usted desea crear un módulo de blog, y desea que los usuarios o los co-desarrolladores añadir plugins para extender esta funcionalidad módulo.

Actualización: Gracias por las respuestas de ultra velocidad, pero creo que esto se ha terminado para mí. ¿No hay una solución más simple, como he visto en el sistema de creación de complementos de blogengine, solo tienes que decorar el complemento de la clase con [Extensión]?

estoy tipo de mediados desarrollador del núcleo, por lo que yo estaba pensando en la clase base, la herencia, las interfaces, ¿qué te parece?

+0

La arquitectura del complemento no es simple. Si fuera simple, se incluiría por diseño en cada pila de software y lenguaje de programación. Cada complemento necesita comunicarse con el programa central de algún modo definido (de lo contrario, serían solo programas separados). – Aron

Respuesta

12

Editar

me volvió a escribir por completo mi respuesta en base a su pregunta de edición.

Te voy a enseñar lo fácil que es implementar una arquitectura de plugins con sólo los pasos mínimos.

Paso 1: Definir una interfaz que sus plugins implementarán.

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

Paso 2: Crear un plugin que implementa IPlugin.

namespace PluginX 
{ 
    using PluginInterface; 

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

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

Paso 3: Ejecutar el complemento.

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");   

     } 
    } 
} 

tener en cuenta, esto es sólo el ejemplo básico, más directa de un architechure plugin. También puede hacer cosas tales como

  • crean una serie plugin para ejecutar su plug-in en el interior de su propio AppDomain
  • elegir entre interfaces, clases abstractas, o atributos para decorar sus complementos con
  • uso reflexión, las interfaces , Thunks o delegados emitidos por IL para obtener el último trabajo de encuadernación

si su diseño así lo exige.

+1

gracias, esto es exactamente lo que estaba buscando :) – DevMania

1

Esto suena como un trabajo para el Managed Extensibility Framework de Microsoft. Está en un lanzamiento de vista previa en este momento, pero parece ser una mejor apuesta que rodar su propio marco para esto. Hay enlaces a guías sobre cómo usar esto en el sitio allí.

2

Es valioso para separar las perspectivas técnicas y architecturas:

  • En el nivel de código MEF (Managed Extensibility Framework) es un buen comienzo. Here es un ejemplo simple.
  • Cualquier otro DI (marco de inyección de dependencia) puede funcionar bien a (es decir, la Unidad.)

Y es bueno para ver este problema en el nivel de arquitectura:

Creo que es rápido y eficiente si lee & intente algunos de esos marcos. Y de vez en cuando lee la fuente si encuentra algo interesante.

Editar

si usted está buscando un motor de blogs extensible a continuación, tratar Blog Engine primero. Es de la comunidad ASP.NET.

1

Si desea ver una aplicación de código abierto real que implique esta arquitectura, eche un vistazo a DotNetNuke.

Cuestiones relacionadas