public void Should_Resolve_All_Event_Handlers()
            {
                Assembly assembly = typeof(TestEvent1).Assembly;

                var container = new Container();

                container.RegisterCollection(typeof(IEventAsyncHandler <>), assembly);
                container.RegisterCollection(typeof(IEventHandler <>), assembly);
                container.Register(() => _testOutputHelper);

                var adapter = new SimpleInjectorContainerAdapter(container);
                var eventHandlerResolver = new ContainerEventHandlerResolver(adapter);

                IEnumerable <EventHandlerDelegate> eventHandlerDelegates = eventHandlerResolver.ResolveEventHandlers <TestEvent1>();

                // Get all handlers in assembly.
                int asyncHandlerCount = assembly.DefinedTypes.Count(t =>
                                                                    !t.IsAbstract && !t.IsInterface &&
                                                                    t.ImplementedInterfaces.Any(i =>
                                                                                                i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEventAsyncHandler <>)));

                int syncHandlerCount = assembly.DefinedTypes.Count(t =>
                                                                   !t.IsAbstract && !t.IsInterface &&
                                                                   t.ImplementedInterfaces.Any(i =>
                                                                                               i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEventHandler <>)));

                int totalHandlerCount = asyncHandlerCount + syncHandlerCount;

                // Important Note: This should equal all handlers in this assembly.
                Assert.Equal(totalHandlerCount, eventHandlerDelegates.Count());
            }
            public async Task ShouldNotThrowIfNoEventHandlerIsRegisteredInContainer()
            {
                var container            = new Container();
                var adapter              = new SimpleInjectorContainerAdapter(container);
                var eventHandlerResolver = new ContainerEventHandlerResolver(adapter);
                var delegator            = new EventDelegator(eventHandlerResolver);

                await delegator.SendAsync(new TestEvent1());
            }
Exemple #3
0
            public async Task Should_Be_Good_If_No_Event_Handler_Is_Registered_In_Container()
            {
                var container            = new Container();
                var adapter              = new SimpleInjectorContainerAdapter(container);
                var eventHandlerResolver = new ContainerEventHandlerResolver(adapter);
                var publisher            = new EventPublisher(eventHandlerResolver);

                publisher.OnError += (@event, ex) =>
                {
                    _testOutputHelper.WriteLine(ex.Message);
                };

                await publisher.PublishAsync(new TestEvent1());
            }
Exemple #4
0
            public async Task Should_Invoke_All_Registered_Event_Handlers_In_Container()
            {
                var container = new Container();

                container.RegisterCollection(typeof(IEventAsyncHandler <>), typeof(TestEvent1).Assembly);
                container.RegisterCollection(typeof(IEventHandler <>), typeof(TestEvent1).Assembly);
                container.Register(() => _testOutputHelper);

                var adapter = new SimpleInjectorContainerAdapter(container);
                var eventHandlerResolver = new ContainerEventHandlerResolver(adapter);
                var publisher            = new EventPublisher(eventHandlerResolver);

                publisher.OnError += (@event, ex) =>
                {
                    _testOutputHelper.WriteLine(ex.Message);

                    Assert.IsType <TestEventHandlerException>(ex);
                };

                await publisher.PublishAsync(new TestEvent1());
            }
            public async Task ShouldResolverAllEventHandlersFromContainer()
            {
                Assembly assembly = typeof(TestEvent1).Assembly;

                // Register all event handlers.
                var containerWithEventHandlers = new Container();

                containerWithEventHandlers.Register(() => _outputHelper);
                containerWithEventHandlers.RegisterCollection(typeof(IEventAsyncHandler <>), assembly);
                containerWithEventHandlers.RegisterCollection(typeof(IEventHandler <>), assembly);

                // Get all event handlers from above container and register in this new container as singletons.
                // Register event handlers as singletons so that we can verify HandledEvents property.
                var container = new Container();

                container.Register(() => _outputHelper);
                container.RegisterCollection <IEventAsyncHandler <TestEvent1> >(containerWithEventHandlers.GetAllInstances <IEventAsyncHandler <TestEvent1> >().ToList());
                container.RegisterCollection <IEventHandler <TestEvent1> >(containerWithEventHandlers.GetAllInstances <IEventHandler <TestEvent1> >().ToList());

                var eventHandlerResolver = new ContainerEventHandlerResolver(new SimpleInjectorContainerAdapter(container));

                MessageHandlerDelegate eventHandlerDelegate = eventHandlerResolver.ResolveMessageHandler(typeof(TestEvent1));

                await eventHandlerDelegate.Invoke(new TestEvent1());

                // Get all handlers in assembly.
                var eventAsyncHandlers = container.GetAllInstances <IEventAsyncHandler <TestEvent1> >().Cast <TestEventHandler>().ToList();
                var eventSyncHandlers  = container.GetAllInstances <IEventHandler <TestEvent1> >().Cast <TestEventHandler>().ToList();

                int totalEventHandlerCount = eventAsyncHandlers.Count + eventSyncHandlers.Count;

                int totalEventsHandledCount = eventAsyncHandlers.Sum(e => e.HandledEvents.Count) +
                                              eventSyncHandlers.Sum(e => e.HandledEvents.Count);

                // Important Note: This should equal all handlers in this assembly.
                totalEventHandlerCount.Should().Be(totalEventsHandledCount);
            }
Exemple #6
0
            public async Task Should_Invoke_All_Registered_Event_Handlers_In_Container_For_Each_Events()
            {
                var container = new Container();

                container.RegisterCollection(typeof(IEventAsyncHandler <>), typeof(TestEvent1).Assembly);
                container.RegisterCollection(typeof(IEventHandler <>), typeof(TestEvent1).Assembly);
                container.Register(() => _testOutputHelper);

                var adapter = new SimpleInjectorContainerAdapter(container);
                var eventHandlerResolver = new ContainerEventHandlerResolver(adapter);
                var publisher            = new EventPublisher(eventHandlerResolver);

                publisher.OnError += (@event, ex) =>
                {
                    _testOutputHelper.WriteLine(ex.Message);
                };

                await publisher.PublishAsync(new List <IEvent> {
                    new TestEvent1(), new TestEvent2(), new TestEvent3()
                });

                // Event may not have yet been handled in background.
                await Task.Delay(500);
            }