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>();
            }
            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);
            }
예제 #3
0
            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 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");
            }
예제 #5
0
            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;
                    }
                });
            }