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); }
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"); }
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; } }); }