Esempio n. 1
0
        public async Task PublishAsync(IEvent @event)
        {
            var eventName = _store.GetEventKey(@event.GetType());

            if (_store.ContainSubscription(eventName))
            {
                var subscriptions = _store.GetHandlers(eventName);
                foreach (var subscription in subscriptions)
                {
                    if (subscription.IsDynamic)
                    {
                        var handler =
                            _serviceProvider.GetService(subscription.HandlerType) as IDynamicEventHandler;
                        if (handler == null)
                        {
                            continue;
                        }
                        await handler.Handle(@event);
                    }
                    else
                    {
                        var handler = _serviceProvider.GetService(subscription.HandlerType);
                        if (handler == null)
                        {
                            continue;
                        }

                        var concreteType = typeof(IEventHandler <>).MakeGenericType(@event.GetType());
                        // ReSharper disable once PossibleNullReferenceException
                        await(Task) concreteType.GetMethod("Handle").Invoke(handler, new object[] { @event });
                    }
                }
            }
        }
Esempio n. 2
0
        private async Task ProcessEvent(string eventName, string message)
        {
            if (_store.ContainSubscription(eventName))
            {
                using (var scope = _serviceScopeFactory.CreateScope())
                {
                    var subscriptions = _store.GetHandlers(eventName);
                    foreach (var subscription in subscriptions)
                    {
                        if (subscription.IsDynamic)
                        {
                            IDynamicEventHandler handler =
                                scope.ServiceProvider.GetService(subscription.HandlerType) as IDynamicEventHandler;
                            if (handler == null)
                            {
                                continue;
                            }
                            dynamic eventData = JObject.Parse(message);
                            await handler.Handle(eventData);
                        }
                        else
                        {
                            var handler = scope.ServiceProvider.GetService(subscription.HandlerType);
                            if (handler == null)
                            {
                                continue;
                            }
                            var eventType        = _store.GetEventType(eventName);
                            var integrationEvent = Singleton <IJsonConvert> .Instance.DeserializeObject(message, eventType);

                            var concreteType = typeof(IEventHandler <>).MakeGenericType(eventType);
                            // ReSharper disable once PossibleNullReferenceException
                            await(Task) concreteType.GetMethod("Handle").Invoke(handler, new[] { integrationEvent });
                        }
                    }
                }
            }
        }