public void StoreEvent(Event evt) { var args = new object[] { evt }; var methods = GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public) .Where(m => m.Name == "Store") .Where(m => { ParameterInfo[] parameters = m.GetParameters(); return parameters.Length == 1 && parameters[0].ParameterType == evt.GetType(); }); var method = methods.FirstOrDefault(); if (method != null) { method.Invoke(this, args); } }
protected void Record(Event evt) { _uncommittedEvents.Add(evt); }