Пример #1
0
        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)));
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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");
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
 private bool Equals(EventHandlerMethod other)
 {
     return(Equals(EventTypeInfo, other.EventTypeInfo) && Equals(ParentType, other.ParentType));
 }