public IEnumerable <EventHandlerMethod> ResolveEventMethods(Type type) { TypeInfo nfo = type.GetTypeInfo(); return(type.GetRuntimeMethods() .Where(i => !i.IsAbstract && i.IsPublic && !i.IsConstructor && !i.IsStatic && MatchesNameConvention(i) && HasParameterSignature(i)) .Select(i => EventHandlerMethod.FromMethod(nfo, i))); }
private async Task SafeInvoke(IEvent @event, EventHandlerMethod method, object instance) { try { await Invoker.InvokeAsync(@event, method, instance); } catch (Exception err) { string msg = $"Error in event handler {err.Message} when handling {@event.GetType().FullName}"; logger.LogError(err, msg); } }
internal static async Task SafeInvoke(IEvent @event, EventHandlerMethod method, object instance) { try { await Invoker.InvokeAsync(@event, method, instance); } catch (Exception err) { string msg = $"Error in event handler {err.Message} when handling {@event.GetType().FullName}"; Trace.WriteLine(msg, "BE.CQRS.EventHandler"); } }
internal Task InvokeAsync(IEvent @event, EventHandlerMethod method, object instance) { object result = method.Method.Invoke(instance, new object[] { @event }); if (!method.Awaitable) { return(Task.FromResult(true)); } if (!(result is Task task)) { throw new InvalidOperationException("Expected return type of \"Task\"!"); } return(task); }
private bool Equals(EventHandlerMethod other) { return(Equals(EventTypeInfo, other.EventTypeInfo) && Equals(ParentType, other.ParentType)); }