コード例 #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 });
                    }
                }
            }
        }
コード例 #2
0
        public void Subscribe <T, TH>() where T : class, IEvent where TH : IEventHandler <T>
        {
            var eventName = _store.GetEventKey <T>();

            Subscribe(eventName);

            _logger.LogInformation("Subscribing to event {EventName} with {EventHandler}", eventName,
                                   typeof(TH).GetEventName());

            _store.AddSubscription <T, TH>();
            StartBasicConsume();
        }