Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection;
- namespace Recetas.Cap03
- {
- // Interfaz común para plugins:
- public interface IPlugin
- {
- string Descripcion
- {
- get;
- set;
- }
- // Inicia un plugin:
- void Iniciar();
- // Deteiene un plugin:
- void Detener();
- }
- // Clase abstracta común para todas clases concretas
- // de plugins:
- public abstract class PluginAbstracto: IPlugin
- {
- private string descripcion;
- // Establece y obtiene la descripción del plugin:
- public string Descripcion
- {
- get
- {
- return descripcion;
- }
- set
- {
- descripcion = value;
- }
- }
- // Las clases derivadas deben crear la implementación
- // concreta de los métodos abstractos:
- public abstract void Iniciar();
- public abstract void Detener();
- }
- // Plugin concreto:
- public class PluginBasico : PluginAbstracto
- {
- // Implementación particular de `Iniciar`:
- public override void Iniciar()
- {
- Console.WriteLine ("Descripción: {0}\n\tEstado: Iniciando", Descripcion);
- }
- // Implementación particular de `Detener`:
- public override void Detener()
- {
- Console.WriteLine ("Descripción: {0}\n\tEstado: Deteniendo", Descripcion);
- }
- }
- // Representa la factoría de instancias de plugins:
- public sealed class FactoriaPlugins
- {
- public static IPlugin CrearPlugin(string assembly, string nombrePlugin, string descripcion)
- {
- // Obtención de la representación Type del plugin:
- Type tipo = Type.GetType(nombrePlugin + ", " + assembly);
- // Obtención de constructor:
- ConstructorInfo ctorInfo = tipo.GetConstructor( Type.EmptyTypes);
- // Crear el objeto:
- IPlugin plugin = ctorInfo.Invoke(null) as IPlugin;
- // Establece una descripción para el plugin:
- plugin.Descripcion = descripcion;
- return plugin;
- }
- }
- // «Client»
- public sealed class Aplicacion
- {
- public static void Main()
- {
- Console.WriteLine();
- // Creación de un plugin utilziando `FactoriaPlugins`:
- IPlugin plugin = FactoriaPlugins.CrearPlugin(
- "Factoria",
- "Recetas.Cap03.PluginBasico",
- "Plugin de capacidades básicas"
- );
- // Inicio de la carga del plugin:
- plugin.Iniciar();
- // Detiene el plugin:
- plugin.Detener();
- Console.WriteLine ();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement