public IHandlerActivator GetActivator()
        {
            _handlerTypesToRegister
            .SelectMany(type => GetHandlerInterfaces(type)
                        .Select(handlerType =>
                                new
            {
                HandlerType  = handlerType,
                ConcreteType = type
            }))
            .GroupBy(a => a.HandlerType)
            .ForEach(a =>
            {
                var serviceType = a.Key;

                Console.WriteLine("Registering {0} => {1}", serviceType, string.Join(", ", a));

                _container.RegisterCollection(serviceType, a.Select(g => g.ConcreteType));
            });

            _handlerTypesToRegister.Clear();

            var containerAdapter = new SimpleInjectorContainerAdapter(_container);

            _disposables.Add(containerAdapter);

            return(containerAdapter);
        }
            public async Task Should_Invoke_Registered_Query_Handler_In_Container_When_Dispatched_Multiple_Times()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);
                container.Register <IQueryAsyncHandler <QuerySomethingWithNonReferenceTypeResult, int> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter);

                const string data1 = "Test message 1.";
                const string data2 = "Test message 2.";
                const int    data3 = 1;

                var dispatcher = new QueryDispatcher(resolver);
                var result1    = dispatcher.DispatchAsync <QuerySomething, string>(new QuerySomething(data1));
                var result2    = dispatcher.DispatchAsync <QuerySomething, string>(new QuerySomething(data2));
                var result3    = dispatcher.DispatchAsync <QuerySomethingWithNonReferenceTypeResult, int>(new QuerySomethingWithNonReferenceTypeResult(data3));

                await Task.WhenAll(result1, result2, result3);

                Assert.Equal(data1, await result1);
                Assert.Equal(data2, await result2);
                Assert.Equal(data3, await result3);
            }
            public async Task Should_Store_Registered_Query_Handler_In_Container()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);

                var container = new Container();

                container.Register <IQueryAsyncHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter); // Async handler resolver

                const string data = nameof(Should_Store_Registered_Query_Handler_In_Container);

                QueryHandlerDelegate <string> queryHandlerDelegate = resolver.ResolveQueryHandler <QuerySomething, string>();

                Assert.NotNull(queryHandlerDelegate);

                var registeredQueryHandler = container.GetInstance <IQueryAsyncHandler <QuerySomething, string> >();

                var query = new QuerySomething(data);

                var result1 = await queryHandlerDelegate.Invoke(query);

                var result2 = await registeredQueryHandler.HandleAsync(query);

                Assert.Equal(data, result1);
                Assert.Equal(data, result2);
                Assert.Equal(result1, result2);
            }
            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 ShouldInvokeRegisteredQueryHandlerInContainerWhenDispatchedMultipleTimes()
            {
                var queryHandler = new TestQueryHandler(_outputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);
                container.Register <IQueryAsyncHandler <QuerySomethingWithNonReferenceTypeResult, int> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter);

                const string data1 = "Test message 1.";
                const string data2 = "Test message 2.";
                const int    data3 = 1;

                var dispatcher = new QueryDispatcher(resolver);
                var result1    = dispatcher.DispatchAsync <QuerySomething, string>(new QuerySomething(data1));
                var result2    = dispatcher.DispatchAsync <QuerySomething, string>(new QuerySomething(data2));
                var result3    = dispatcher.DispatchAsync <QuerySomethingWithNonReferenceTypeResult, int>(new QuerySomethingWithNonReferenceTypeResult(data3));

                await Task.WhenAll(result1, result2, result3);

                (await result1).Should().Be(data1);
                (await result2).Should().Be(data2);
                (await result3).Should().Be(data3);
            }
            public async Task ShouldResolveQueryHandlersFromContainer()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);

                var container = new Container();

                container.Register <IQueryAsyncHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter); // Async handler resolver

                const string data = nameof(ShouldResolveQueryHandlersFromContainer);

                QueryHandlerDelegate <string> queryHandlerDelegate = resolver.ResolveQueryHandler <QuerySomething, string>();

                queryHandlerDelegate.Should().NotBeNull();

                var registeredQueryHandler = container.GetInstance <IQueryAsyncHandler <QuerySomething, string> >();

                var query = new QuerySomething(data);

                var result1 = await queryHandlerDelegate.Invoke(query);

                var result2 = await registeredQueryHandler.HandleAsync(query);

                result1.Should().Be(data);
                result2.Should().Be(data);
                result1.Should().Be(result1);
            }
        public static void RegistrationByConvention(this Container container, 
            BehaviorConfiguration configuration, 
            Action<IConventionBuilderSyntax<Lifestyle, Container>> convention)
        {
            if (configuration == null)
            {
                configuration = BehaviorConfiguration.Default;
            }

            var logger = new DiagnosticLogger(configuration);
            var serviceMappingTracker = new ServiceMappingTracker(logger);
            var implementationFilter = new ImplementationFilter();
            var adapter = new SimpleInjectorContainerAdapter(container, serviceMappingTracker, implementationFilter);
            var configServiceFilter = ((IBehaviorConfiguration)configuration).GetServiceFilter();

            var asmSelector = new AssemblySelector();
            var serviceExtractor = new ServiceExtractor();
            var containerDecorator = new ContainerLogger<Lifestyle>(adapter, logger);
            var serviceFilterAggregator = new ServiceFilterAggregator(new IServiceFilter[] { configServiceFilter, implementationFilter, serviceExtractor, serviceMappingTracker });
            using (var builder = new ConventionBuilder<Lifestyle>(containerDecorator,
                asmSelector,
                serviceFilterAggregator,
                serviceExtractor))
            {
                var importer = new ConventionBuilderSyntaxDecorator<Lifestyle, Container>(builder, container, implementationFilter, asmSelector);
                convention(importer);
            }
        }
示例#8
0
        public void CanVerifyContainer()
        {
            var container = new Container();
            var adapter   = new SimpleInjectorContainerAdapter(container);

            adapter.SetBus(new FakeBus());

            container.Verify();
        }
            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());
            }
示例#10
0
        public void CanVerifyContainer()
        {
            var container = new Container {
                Options = { DefaultScopedLifestyle = ScopedLifestyle.Flowing }
            };
            var adapter = new SimpleInjectorContainerAdapter(container);

            adapter.SetBus(new FakeBus());

            container.Verify();
        }
            public void ShouldThrowWhenNoRegisteredQueryHandlerInContainerIsFound()
            {
                var          container        = new Container();
                var          containerAdapter = new SimpleInjectorContainerAdapter(container);
                var          resolver         = new ContainerQueryHandlerResolver(containerAdapter); // Sync handler resolver
                var          dispatcher       = new LoggingQueryDispatcher(new QueryDispatcher(resolver), _outputHelper);
                const string data             = nameof(ShouldThrowWhenNoRegisteredAttributeQueryHandlerIsFound);

                Action action = () => dispatcher.Dispatch <QuerySomething, string>(new QuerySomething(data));

                action.Should().Throw <NoQueryHandlerResolvedException>();
            }
示例#12
0
            public void ShouldThrowWhenNoRegisteredCommandHandlerIsFoundInContainer()
            {
                var container        = new Container();
                var containerAdapter = new SimpleInjectorContainerAdapter(container);

                var delegator = new LoggingCommandDelegator(
                    new CommandDelegator(new ContainerCommandHandlerResolver(containerAdapter)), // Sync handler resolver
                    _outputHelper
                    );

                Func <Task> sendAsyncAction = async() => await delegator.SendAsync(new TestCommand());

                sendAsyncAction.Should().Throw <NoMessageHandlerResolvedException>();
            }
示例#13
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());
            }
示例#14
0
            public async Task Should_Invoke_Registered_Command_Handler_In_Container()
            {
                var commandHandler = new TestCommandHandler(_outputHelper);
                var container      = new Container();

                container.Register <ICommandHandler <DoSomethingCommand> >(() => commandHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var dispatcher       = new CommandDispatcher(new ContainerCommandHandlerResolver(containerAdapter)); // Sync handler resolver

                await dispatcher.DispatchAsync(new DoSomethingCommand());

                Assert.Equal(1, commandHandler.HandledCommands.Count);
                Assert.Contains(commandHandler.HandledCommands, c => c is DoSomethingCommand);
            }
            public void ShouldAllowRegisteredQueryHandlersInContainerWithNonReferenceTypeQueryResults()
            {
                var queryHandler = new TestQueryHandler(_outputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomethingWithNonReferenceTypeResult, int> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter); // Async handler resolver
                var dispatcher       = new QueryDispatcher(resolver);

                var result = dispatcher.Dispatch <QuerySomethingWithNonReferenceTypeResult, int>(new QuerySomethingWithNonReferenceTypeResult(1973));

                result.Should().Be(1973);
            }
            public void Should_Allow_Registered_Query_Handlers_In_Container_With_Non_Reference_Type_Query_Results()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomethingWithNonReferenceTypeResult, int> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter); // Async handler resolver
                var dispatcher       = new QueryDispatcher(resolver);

                var result = dispatcher.Dispatch <QuerySomethingWithNonReferenceTypeResult, int>(new QuerySomethingWithNonReferenceTypeResult(1973));

                Assert.Equal(1973, result);
            }
            public void ShouldInvokeRegisteredQueryHandlerInContainer()
            {
                var queryHandler = new TestQueryHandler(_outputHelper);
                var container    = new Container();

                container.Register <IQueryHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryHandlerResolver(containerAdapter); // Sync handler resolver

                const string data = nameof(ShouldInvokeRegisteredQueryHandlerInContainer);

                var dispatcher = new QueryDispatcher(resolver);
                var result     = dispatcher.Dispatch <QuerySomething, string>(new QuerySomething(data));

                result.Should().Be(data);
            }
            public void Should_Invoke_Registered_Query_Handler_In_Container()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);
                var container    = new Container();

                container.Register <IQueryHandler <QuerySomething, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryHandlerResolver(containerAdapter); // Sync handler resolver

                const string data = nameof(Should_Invoke_Registered_Query_Handler_In_Container);

                var dispatcher = new QueryDispatcher(resolver);
                var result     = dispatcher.Dispatch <QuerySomething, string>(new QuerySomething(data));

                Assert.Equal(data, result);
            }
            public async Task Should_Invoke_Registered_Query_Handler_In_Container_With_Cancellation_Token()
            {
                var queryHandler = new TestQueryHandler(_testOutputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomethingWithDelay, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter);
                var dispatcher       = new QueryDispatcher(resolver);

                var          cts  = new CancellationTokenSource();
                const string data = nameof(Should_Invoke_Registered_Attribute_Query_Handler_With_Cancellation_Token);

                var result = await dispatcher.DispatchAsync <QuerySomethingWithDelay, string>(new QuerySomethingWithDelay(data, 500), cts.Token);

                Assert.Equal(data, result);
            }
            public async Task ShouldInvokeRegisteredQueryHandlerInContainerWithCancellationToken()
            {
                var queryHandler = new TestQueryHandler(_outputHelper);
                var container    = new Container();

                container.Register <IQueryAsyncHandler <QuerySomethingWithDelay, string> >(() => queryHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerQueryAsyncHandlerResolver(containerAdapter);
                var dispatcher       = new QueryDispatcher(resolver);

                var          cts  = new CancellationTokenSource();
                const string data = nameof(ShouldInvokeRegisteredAttributeQueryHandlerWithCancellationToken);

                var result = await dispatcher.DispatchAsync <QuerySomethingWithDelay, string>(new QuerySomethingWithDelay(data, 500), cts.Token);

                result.Should().Be(data);
            }
示例#21
0
            public void Should_Throw_When_No_Registered_Command_Handler_In_Container_Is_Found()
            {
                Assert.Throws <NoCommandHandlerResolvedException>(() =>
                {
                    var container        = new Container();
                    var containerAdapter = new SimpleInjectorContainerAdapter(container);
                    var dispatcher       = new CommandDispatcher(new ContainerCommandAsyncHandlerResolver(containerAdapter)); // Async handler resolver

                    try
                    {
                        dispatcher.Dispatch(new DoSomethingCommand());
                    }
                    catch (Exception ex)
                    {
                        _outputHelper.WriteLine(ex.ToString());
                        throw;
                    }
                });
            }
示例#22
0
            public async Task Should_Invoke_Registered_Command_Handler_With_Composite_Resolver()
            {
                var commandHandler = new TestCommandHandler(_outputHelper);
                var container      = new Container();

                container.Register <ICommandHandler <DoSomethingCommand> >(() => commandHandler, Lifestyle.Singleton);
                container.Register <ICommandAsyncHandler <DoSomethingWithCancellationCommand> >(() => commandHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var containerAsyncHandlerResolver = new ContainerCommandAsyncHandlerResolver(containerAdapter);
                var containerHandlerResolver      = new ContainerCommandHandlerResolver(containerAdapter);

                Func <Exception, bool> exceptionHandler = (ex) =>
                {
                    var exception = ex as NoCommandHandlerResolvedException;
                    if (exception != null)
                    {
                        _outputHelper.WriteLine($"Ignoring encountered exception while trying to resolve command handler for {exception.CommandType.Name}...");

                        // Notify as handled if no command handler is resolved from other resolvers.
                        return(true);
                    }

                    return(false);
                };

                var compositeResolver = new CompositeCommandHandlerResolver(new List <ICommandHandlerResolver>()
                {
                    containerAsyncHandlerResolver,
                    containerHandlerResolver
                }, exceptionHandler);                                      // Pass in an exception handler.

                var dispatcher = new CommandDispatcher(compositeResolver); // Composite resolver

                await dispatcher.DispatchAsync(new DoSomethingCommand());

                await dispatcher.DispatchAsync(new DoSomethingWithCancellationCommand());

                Assert.Equal(2, commandHandler.HandledCommands.Count);
                Assert.Contains(commandHandler.HandledCommands, c => c is DoSomethingCommand);
                Assert.Contains(commandHandler.HandledCommands, c => c is DoSomethingWithCancellationCommand);
            }
示例#23
0
            public void Should_Register_All_Command_Handlers()
            {
                var container = new Container();

                container.Register <ICommandHandler <DoSomethingCommand> >(() => new TestCommandHandler(_testOutputHelper), Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var resolver         = new ContainerCommandHandlerResolver(containerAdapter);

                CommandHandlerDelegate commandHandlerDelegate = resolver.ResolveCommandHandler <DoSomethingCommand>();

                // Delegate should invoke the actual command handler - TestCommandHandler.
                commandHandlerDelegate.Invoke(new DoSomethingCommand());

                // Get instance from container to see if it was invoked.
                var registeredCommandHandler = (TestCommandHandler)container.GetInstance <ICommandHandler <DoSomethingCommand> >();

                Assert.Equal(1, registeredCommandHandler.HandledCommands.Count);
                Assert.Contains(registeredCommandHandler.HandledCommands, c => c is DoSomethingCommand);
            }
            public async Task ShouldInvokeRegisteredQueryHandlerWithCompositeResolver()
            {
                var commandHandler = new TestQueryHandler(_outputHelper);
                var container      = new Container();

                container.Register <IQueryAsyncHandler <QuerySomethingWithNonReferenceTypeResult, int> >(() => commandHandler, Lifestyle.Singleton);
                container.Register <IQueryHandler <QuerySomething, string> >(() => commandHandler, Lifestyle.Singleton);

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var containerAsyncHandlerResolver = new ContainerQueryAsyncHandlerResolver(containerAdapter);
                var containerHandlerResolver      = new ContainerQueryHandlerResolver(containerAdapter);

                Func <Exception, bool> exceptionHandler = (ex) =>
                {
                    var exception = ex as NoQueryHandlerResolvedException;
                    if (exception != null)
                    {
                        _outputHelper.WriteLine($"Ignoring encountered exception while trying to resolve query handler for {exception.QueryType.Name}...");

                        // Notify as handled if no command handler is resolved from other resolvers.
                        return(true);
                    }

                    return(false);
                };

                var compositeResolver = new CompositeQueryHandlerResolver(new List <IQueryHandlerResolver>()
                {
                    containerAsyncHandlerResolver,
                    containerHandlerResolver
                }, exceptionHandler);                                    // Pass in an exception handler.

                var dispatcher = new QueryDispatcher(compositeResolver); // Composite resolver

                int result1 = await dispatcher.DispatchAsync <QuerySomethingWithNonReferenceTypeResult, int>(new QuerySomethingWithNonReferenceTypeResult(1973));

                string result2 = await dispatcher.DispatchAsync <QuerySomething, string>(new QuerySomething("1973"));

                result1.Should().Be(1973);
                result2.Should().Be("1973");
            }
示例#25
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());
            }
示例#26
0
            public void ShouldResolveCommandHandlerFromCompositeResolver()
            {
                var commandHandler = new TestCommandHandler(_outputHelper);
                var container      = new Container();

                container.RegisterSingleton <ICommandHandler <TestCommand> >(commandHandler);
                container.RegisterSingleton <ICommandAsyncHandler <CancellableTestCommand> >(commandHandler);

                // Exception handler will log and ignore exception.
                Func <Exception, bool> exceptionHandler = (ex) =>
                {
                    if (ex != null)
                    {
                        _outputHelper.WriteLine($"Ignoring encountered exception while trying to resolve command handler: {ex.Message}");

                        // Notify as handled if no command handler is resolved from other resolvers.
                        return(true);
                    }

                    return(false);
                };

                var containerAdapter = new SimpleInjectorContainerAdapter(container);
                var containerAsyncHandlerResolver = new ContainerCommandAsyncHandlerResolver(containerAdapter, exceptionHandler);
                var containerHandlerResolver      = new ContainerCommandHandlerResolver(containerAdapter, exceptionHandler);

                CompositeMessageHandlerResolver compositeResolver = CompositeMessageHandlerResolver.Compose(
                    containerAsyncHandlerResolver,
                    containerHandlerResolver);

                MessageHandlerDelegate testCommandHandlerDelegate            = compositeResolver.ResolveMessageHandler(typeof(TestCommand));
                MessageHandlerDelegate cancellableTestCommandHandlerDelegate = compositeResolver.ResolveMessageHandler(typeof(CancellableTestCommand));

                testCommandHandlerDelegate?.Invoke(new TestCommand());
                cancellableTestCommandHandlerDelegate?.Invoke(new CancellableTestCommand());

                commandHandler.HandledCommands.Should().HaveCount(2);
                commandHandler.HasHandledCommand <TestCommand>().Should().BeTrue();
                commandHandler.HasHandledCommand <CancellableTestCommand>().Should().BeTrue();
            }
            public void Should_Throw_When_No_Registered_Query_Handler_In_Container_Is_Found()
            {
                Assert.Throws <NoQueryHandlerResolvedException>(() =>
                {
                    var container        = new Container();
                    var containerAdapter = new SimpleInjectorContainerAdapter(container);
                    var resolver         = new ContainerQueryHandlerResolver(containerAdapter); // Sync handler resolver
                    var dispatcher       = new QueryDispatcher(resolver);

                    const string data = nameof(Should_Throw_When_No_Registered_Attribute_Query_Handler_Is_Found);

                    try
                    {
                        var result = dispatcher.Dispatch <QuerySomething, string>(new QuerySomething(data));
                    }
                    catch (Exception ex)
                    {
                        _testOutputHelper.WriteLine(ex.ToString());
                        throw;
                    }
                });
            }
示例#28
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);
            }
        public void Init()
        {
            var emptyContainer = new Container();

            containerAdapter = new SimpleInjectorContainerAdapter(emptyContainer);
        }