Пример #1
0
        /// <summary>
        /// Initializes a new instance of <see cref="EventHandler"/> using a delegate <paramref name="delegateHandler"/> instance.
        /// </summary>
        /// <param name="delegateHandler">The delegate event handler.</param>
        protected EventHandler(EventHandler delegateHandler)
        {
            Verify.NotNull(delegateHandler, nameof(delegateHandler));

            this.eventHandlerFactory = delegateHandler.eventHandlerFactory;
            this.handlerType = delegateHandler.handlerType;
            this.eventType = delegateHandler.eventType;
            this.executor = delegateHandler.executor;
        }
            protected UsingSagaEventHandlerBase()
            {
                var sagaMetadata     = new FakeSaga().GetMetadata();
                var commandPublisher = new Mock <IPublishCommands>();
                var executor         = new Action <Object, Event>((handler, e) => { ((FakeSaga)handler).Handle((Timeout)e); Handled = true; });
                var eventHandler     = new EventHandler(typeof(FakeSaga), typeof(Timeout), executor, () => { throw new NotSupportedException(); });

                SystemTime.ClearOverride();
                SagaEventHandler = new SagaTimeoutHandler(eventHandler, sagaMetadata, SagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object));
            }
Пример #3
0
            public void InvokeUnderlyingExecutorWithEventAndHandlerInstance()
            {
                var handled      = false;
                var e            = new FakeEvent();
                var handler      = new Object();
                var eventHandler = new EventHandler(typeof(Object), typeof(FakeEvent), (a, b) => { handled = a == handler && b == e; }, () => handler);

                using (var context = new EventContext(GuidStrategy.NewGuid(), HeaderCollection.Empty, e))
                    eventHandler.Handle(context);

                Assert.True(handled);
            }
            protected UsingSagaEventHandlerBase()
            {
                var executor = new Action <Object, Event>((handler, e) => { ((FakeSaga)handler).Handle((FakeEvent)e); Handled = true; });

                SagaId      = GuidStrategy.NewGuid();
                AggregateId = GuidStrategy.NewGuid();
                Event       = new FakeEvent {
                    Id = SagaId
                };
                SagaMetadata     = new FakeSaga().GetMetadata();
                EventContext     = new EventContext(AggregateId, HeaderCollection.Empty, Event);
                EventHandler     = new EventHandler(typeof(FakeSaga), typeof(FakeEvent), executor, () => { throw new NotSupportedException(); });
                SagaEventHandler = new SagaEventHandler(EventHandler, SagaMetadata, SagaStore.Object, new Lazy <IPublishCommands>(() => CommandPublisher.Object));
            }
        /// <summary>
        /// Discover all event handlers methods associated with any locatable class marked with with <see cref="EventHandlerAttribute"/>.
        /// </summary>
        /// <param name="sagaStore">The saga store to pass on to any <see cref="SagaEventHandler"/> instances.</param>
        /// <param name="typeLocator">The type locator use to retrieve all known classes marked with <see cref="EventHandlerAttribute"/>.</param>
        /// <param name="serviceProvider">The service locator used to retrieve singleton event handler dependencies.</param>
        /// <param name="commandPublisher">The command publisher used to publish saga commands.</param>
        private static Dictionary<Type, List<EventHandler>> DiscoverHandleMethods(ILocateTypes typeLocator, IServiceProvider serviceProvider, IStoreSagas sagaStore, Lazy<IPublishCommands> commandPublisher)
        {
            var handlerTypes = typeLocator.GetTypes(type => !type.IsAbstract && type.IsClass && type.GetCustomAttribute<EventHandlerAttribute>() != null);
            var knownEventHandlers = new Dictionary<Type, List<EventHandler>>();

            foreach (var handlerType in handlerTypes)
            {
                var handleMethods = GetHandleMethods(handlerType, serviceProvider);
                var sagaMetadata = typeof(Saga).IsAssignableFrom(handlerType) ? GetSagaMetadata(handlerType, handleMethods) : null;

                foreach (var handleMethod in handleMethods)
                {
                    List<EventHandler> eventHandlers;
                    Type eventType = handleMethod.Key;
                    if (!knownEventHandlers.TryGetValue(eventType, out eventHandlers))
                        knownEventHandlers.Add(eventType, eventHandlers = new List<EventHandler>());

                    var eventHandler = new EventHandler(handlerType, eventType, handleMethod.Value, GetHandlerFactory(handlerType, serviceProvider));
                    if (sagaMetadata != null)
                        eventHandler = eventType == typeof(Timeout) ? new SagaTimeoutHandler(eventHandler, sagaMetadata, sagaStore, commandPublisher) : new SagaEventHandler(eventHandler, sagaMetadata, sagaStore, commandPublisher);

                    eventHandlers.Add(eventHandler);
                }
            }

            return knownEventHandlers;
        }
Пример #6
0
            public void ReturnFriendlyDescription()
            {
                var eventHandler = new EventHandler(typeof(Object), typeof(FakeEvent), (h, e) => { }, () => new Object());

                Assert.Equal($"{typeof (FakeEvent)} Event Handler ({typeof (Object)})", eventHandler.ToString());
            }
Пример #7
0
            public void ContextCannotBeNull()
            {
                var eventHandler = new EventHandler(typeof(Object), typeof(FakeEvent), (h, e) => { }, () => new Object());

                Assert.Throws <ArgumentNullException>(() => eventHandler.Handle(null));
            }