InvokeMethodAddon.cs
1 using sage.ew.interficies;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 
7 namespace Sage.ES.S50.Addons
8 {
9  internal abstract class InvokeMethodAddon : IInvokeMethodAddon
10  {
11  #region Members
12  private readonly Dictionary<string, object> addons;
13  protected string Name { get; set; }
14  #endregion Members
15 
16  #region Constructors
17  internal InvokeMethodAddon(Dictionary<string,object> _addons)
18  {
19  addons = _addons;
20  }
21 
22  #endregion
23  #region events
24  public event InvokeMethodAddonsEventHandler OnBeginInvokeMethodAddon;
31  public event InvokeMethodAddonsEventHandler OnEndInvokeMethodAddons;
35  public event InvokeMethodErrorEventHandler OnErrorInvokeMethodsAddons;
41  public delegate void InvokeMethodAddonsEventHandler(object sender, InvokeMethodEventArgs e);
47  public delegate void InvokeMethodErrorEventHandler(object sender, InvokeMethodErrorEventArgs e);
48 
49  #endregion events
50 
51  #region Public Methods
52  public virtual object InvokeMethod(params object[] parameters)
53  {
54  if (!Condition())
55  return null;
56  foreach (KeyValuePair<string, object> addon in addons)
57  {
58  try
59  {
60  if (Condition(addon))
61  {
62  InvokeMethodEventArgs e = new InvokeMethodEventArgs(Name, ((IModulo)addon.Value)._Nombre);
63  OnBeginInvokeMethodAddon?.Invoke(null, e);
64  IModulo modulo = (IModulo)addon.Value;
65  MethodModulo(modulo, parameters);
66  OnEndInvokeMethodAddons?.Invoke(null, e);
67  }
68  }
69  catch (Exception e)
70  {
71  OnErrorInvokeMethodsAddons?.Invoke(this, new InvokeMethodErrorEventArgs(Name, ((IModulo)addon.Value)._Nombre, e.Message));
72  }
73  }
74  return Return();
75  }
76 
77  protected abstract void MethodModulo(IModulo modulo, params object[] parameters);
78  protected virtual bool Condition(KeyValuePair<string, object> addon)
79  {
80  return true;
81  }
82  protected virtual bool Condition()
83  {
84  return HasAddonsLoaded();
85  }
86  protected virtual object Return()
87  {
88  return null;
89  }
90 
91  #endregion Public Methods
92 
93  #region Private Methods
94  protected virtual void OnError(InvokeMethodErrorEventArgs e)
95  {
96  OnEndInvokeMethodAddons?.Invoke(this, e);
97  }
98  private bool HasAddonsLoaded()
99  {
100  return addons.Count() > 0;
101  }
102 
103  #endregion Private Methods
104  }
105 }
PE-93426 Interficie para los módulos de la aplicación
Definition: IModulo.cs:22