// Agregamos la informacion del modulo public ModuleInfo(string name, Type moduleType) { // Si el modulo que se quiere agregar no desciende de BaseModule generar error if (!moduleType.IsSubclassOf(typeof(BaseModule))) { throw new ArgumentException("La clase no desiende de ModuleBase"); } this.name = name; this.moduleType = moduleType; this.module = null; }
// Metodo para ejectutar el procedimiento asignado a la accion del modulo activo public static void PerformAction(object key, object sender, EventArgs e) { // Evaluamos que el modulo actual sea diferente de null if (ModuleInfoCollection.CurrentModuleInfo != null) { BaseModule module = ModuleInfoCollection.CurrentModuleInfo.Module; // Ejecutamos el procedimiento asignado module.Actions.PerformModuleAction(key, sender, e); // Una vez ejecutado el procedimiento reactualizamos el estado de las acciones del modulo module.UpdateActions(); } }
// Creamos la instancia del modulo protected void CreateModule() { // Validamos que el modulo no este activo if (this.module == null) { ConstructorInfo constructorInfoObj = moduleType.GetConstructor(Type.EmptyTypes); if (constructorInfoObj == null) { throw new ApplicationException(moduleType.FullName + " doesn't have a public constructor with empty parameters"); } this.module = constructorInfoObj.Invoke(null) as BaseModule; } }
// Cerramos el modulo public void Close() { // Destruimos la instancia del modulo para que se pueda volver abrir module = null; }