Exemple #1
0
        public Task <TResult> ProcessAsync <TResult>(IAsyncQuery <TResult> query)
        {
            var handlerType = typeof(IAsyncQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult));
            var handler     = (IAsyncQueryHandler <IAsyncQuery <TResult>, TResult>)_container.GetInstance(handlerType);

            return(handler.HandleAsync((dynamic)query, CancellationToken.None));
        }
Exemple #2
0
        public async Task <TResult> Send <TResult>(IAsyncQuery <TResult> query)
        {
            var queryType = query.GetType();

            var validator = _validatorsFactory(queryType);

            if (validator != null)
            {
                var validatorType = validator.GetType();

                var actionPossible = (ActionPossible)validatorType.InvokeMember("Execute", BindingFlags.InvokeMethod, null, validator, new object[] { query });

                if (actionPossible.IsImpossible)
                {
                    _eventsBus.Publish(new ActionImposibleEvent(actionPossible.Errors));
                    return(default(TResult));
                }
            }

            var handler = _asyncHandlersFactory(queryType, typeof(TResult));

            var handlerType = handler.GetType();

            return(await(Task <TResult>) handlerType.InvokeMember("Handle", BindingFlags.InvokeMethod, null, handler, new object[] { query }));
        }
Exemple #3
0
        public async Task <TResult> Process <TResult>(IAsyncQuery <TResult> query)
        {
            var handlerType = typeof(IAsyncQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult));

            dynamic handler = _container.Resolve(handlerType);

            return(await handler.HandleAsync((dynamic)query));
        }
Exemple #4
0
        public Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query, CancellationToken cancellationToken)
        {
            var     handlerType = typeof(IAsyncQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult));
            dynamic handler     = _container.GetInstance(handlerType);

            var result = (Task <TResult>)handler.HandleAsync((dynamic)query, (dynamic)cancellationToken);

            return(result);
        }
 public AsyncQueryResultBuilder(IAsyncQuery <TResult> query, ViewDataDictionary viewData, TempDataDictionary tempData, ViewEngineCollection viewEngineCollection)
 {
     this.query                = query;
     this.viewData             = viewData;
     this.tempData             = tempData;
     this.viewEngineCollection = viewEngineCollection;
     this.mapper               = DependencyResolver.Current.GetService <IMapper>();
     mediator = DependencyResolver.Current.GetService <IMediator>();
 }
Exemple #6
0
        public async Task <TResult> RequestAsync <TResult>(IAsyncQuery <TResult> query)
        {
            var handlerType = typeof(IAsyncQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult));

            var handler = container.GetInstance(handlerType);

            var result = await(Task <TResult>) handler.GetType().GetMethod("HandleAsync", new[] { query.GetType() }).Invoke(handler, new object[] { query });

            return(result);
        }
Exemple #7
0
        public async Task <TResult> ProcessAsync <TResult>(IAsyncQuery <TResult> query) where TResult : class
        {
            var handlerType = typeof(IAsyncQueryExecutor <,>).MakeGenericType(query.GetType(), typeof(TResult));
            var executor    = serviceProvider.GetService(handlerType);

            if (executor == null)
            {
                throw new Exception(string.Format("Query executor not found for query type {0}", query.GetType().Name));
            }

            return(await(executor as dynamic).ExecuteAsync(query as dynamic));
        }
Exemple #8
0
        /// <inheritdoc cref="IAsyncQueryMediary.QueryAsync{TContext,TResult}"/>
        public virtual Task <TResult> QueryAsync <TContext, TResult>(IAsyncQuery <TContext, TResult> query, TContext context, CancellationToken cancellationToken = default)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(Decorator.Decorate(GetOperationName(query, nameof(query.Execute)), () => query.Execute(context, cancellationToken)));
        }
Exemple #9
0
        public async Task <QueryExecutionResult <TResult> > ExecuteAsync <TSource, TResult>(
            IAsyncQuery <TSource, TResult> query,
            IQueryContext context
            )
        {
            var source = _serviceProvider.GetService(typeof(TSource));

            if (source is not null)
            {
                return(await query.ExecuteAsync((TSource)source, context));
            }

            return(default);
Exemple #10
0
        public virtual Task <TResult> QueryAsync <TContext, TResult>(IAsyncQuery <TContext, TResult> query, TContext context)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(Decorator.Decorate(query, () => query.ExecuteAsync(context)));
        }
		public async Task ProcessQuery_QueryIsNotCacheInfo_ShouldReturnCorrectValue(
			[Frozen]Mock<IAsyncQueryBus> queryBus,
			IAsyncQuery<object> query,
			object expected,
			CacheAsyncQueryBus sut)
		{
			//arrange
			queryBus.Setup(q => q.ProcessQuery<IAsyncQuery<object>, object>(query)).ReturnsTask(expected);

			//act
			var actual = await sut.ProcessQuery<IAsyncQuery<object>, object>(query);

			//assert
			actual.Should().Be(expected);
		}
        public async Task ProcessQuery_QueryIsNotCacheInfo_ShouldReturnCorrectValue(
            [Frozen] Mock <IAsyncQueryBus> queryBus,
            IAsyncQuery <object> query,
            object expected,
            CacheAsyncQueryBus sut)
        {
            //arrange
            queryBus.Setup(q => q.ProcessQuery <IAsyncQuery <object>, object>(query)).ReturnsTask(expected);

            //act
            var actual = await sut.ProcessQuery <IAsyncQuery <object>, object>(query);

            //assert
            actual.Should().Be(expected);
        }
		public void ProcessQuery_WhenQueryHandlerIsNotFound_ShouldThrow(
			[Frozen]Mock<IAsyncQueryCommandHandlerFactory> asyncQueryHandlerFactory,
			IAsyncQuery<string> query,			
			AsyncCommandQueryBus sut)
		{
			//arrange
			asyncQueryHandlerFactory.Setup(a => a.Create<IAsyncQuery<string>, string>())
				.Throws<InvalidOperationException>();
			
			//act
			Func<Task> action = async () => await sut.ProcessQuery<IAsyncQuery<string>, string>(query);

			//assert
			action.ShouldThrow<InvalidOperationException>();
		}
        public void ProcessQuery_WhenQueryHandlerIsNotFound_ShouldThrow(
            [Frozen] Mock <IAsyncQueryCommandHandlerFactory> asyncQueryHandlerFactory,
            IAsyncQuery <string> query,
            AsyncCommandQueryBus sut)
        {
            //arrange
            asyncQueryHandlerFactory.Setup(a => a.Create <IAsyncQuery <string>, string>())
            .Throws <InvalidOperationException>();

            //act
            Func <Task> action = async() => await sut.ProcessQuery <IAsyncQuery <string>, string>(query);

            //assert
            action.ShouldThrow <InvalidOperationException>();
        }
Exemple #15
0
        public async Task <T> QueryAsync <TSource, T>(IAsyncQuery <TSource, T> query)
        {
            var context = new QueryContext(_serviceProvider);

            foreach (var executor in _asyncExecutors)
            {
                var queryExecutionResult = await executor.ExecuteAsync(query, context);

                if (queryExecutionResult.Type == QueryExecutionResultType.Success)
                {
                    return(queryExecutionResult.Result);
                }
            }

            throw new NoMatchingQueryExecutorException();
        }
		public async Task ProcessQuery_ShouldReturnCorrectValue(
			[Frozen]Mock<IAsyncQueryCommandHandlerFactory> asyncQueryHandlerFactory,
			Mock<IAsyncQueryHandler<IAsyncQuery<string>, string>> queryHandler,
			IAsyncQuery<string> query,
			string expected,
			AsyncCommandQueryBus sut)
		{
			//arrange
			asyncQueryHandlerFactory.Setup(a => a.Create<IAsyncQuery<string>, string>()).Returns(queryHandler.Object);
			queryHandler.Setup(q => q.Execute(query)).ReturnsTask(expected);

			//act
			var actual = await sut.ProcessQuery<IAsyncQuery<string>, string>(query);

			//assert
			actual.Should().Be(expected);
		}
        public async Task ProcessQuery_ShouldReturnCorrectValue(
            [Frozen] Mock <IAsyncQueryCommandHandlerFactory> asyncQueryHandlerFactory,
            Mock <IAsyncQueryHandler <IAsyncQuery <string>, string> > queryHandler,
            IAsyncQuery <string> query,
            string expected,
            AsyncCommandQueryBus sut)
        {
            //arrange
            asyncQueryHandlerFactory.Setup(a => a.Create <IAsyncQuery <string>, string>()).Returns(queryHandler.Object);
            queryHandler.Setup(q => q.Execute(query)).ReturnsTask(expected);

            //act
            var actual = await sut.ProcessQuery <IAsyncQuery <string>, string>(query);

            //assert
            actual.Should().Be(expected);
        }
        /// <inheritdoc />
        public async Task <TResult> DispatchAsync <TResult>(IAsyncQuery <TResult> query)
        {
            Guard.ArgumentNotNull(query, nameof(query));

            // Retriever query handler.
            Type genericType = typeof(IAsyncQueryHandler <,>);

            Type[] typeArguments    = { typeof(TResult), query.GetType() };
            Type   queryHandlerType = genericType.MakeGenericType(typeArguments);
            var    queryHandler     = ServiceProvider.GetRequiredService(queryHandlerType);

            // Invoke retrieve method.
            MethodInfo retrieveMethod = queryHandlerType.GetMethod("RetrieveAsync");
            var        result         = (Task <TResult>)retrieveMethod.Invoke(queryHandler, new object[] { query });

            return(await result);
        }
        public async Task <T> QueryAsync <T>(IAsyncQuery <T> query, CancellationToken cancellationToken = default)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            await EnsureConnectionIsEstablishedAsync(cancellationToken);

            if (_dbConnection == null)
            {
                throw new InvalidOperationException("No db connection established");
            }

            return(await query
                   .ExecuteQueryAsync(_dbConnection, null, cancellationToken)
                   .ConfigureAwait(false));
        }
Exemple #20
0
        public async Task Resolve_ShouldReturnCorrectValue(
            [Frozen] Mock <IHttpRequestSpecificationResolver> mockSpecResolver,
            [Frozen] Mock <IHttpRequestBuilder> mockBuilder,
            [Frozen] Mock <IHttpRequestSpecificationsTransformer> mockTransformer,
            DefaultHttpRequestResolver sut,
            Mock <IHttpRequestBuilderOptions> options,
            IAsyncQuery <string> query,
            IHttpRequestSpecification specs,
            IHttpRequest expected
            )
        {
            //arrange
            mockSpecResolver.Setup(m => m.ResolveHttpRequestSpecification(query)).Returns(specs);
            mockTransformer.Setup(m => m.TransformHttpSpecificationsToHttpBuilderOptions(specs, query))
            .ReturnsTask(options.Object);
            options.Setup(m => m.ToRequest(mockBuilder.Object)).Returns(expected);

            //act
            var actual = await sut.ResolveHttpRequest(query);

            //assert
            actual.Should().Be(expected);
        }
		public async Task Resolve_ShouldReturnCorrectValue(
			[Frozen]Mock<IHttpRequestSpecificationResolver> mockSpecResolver,
			[Frozen]Mock<IHttpRequestBuilder> mockBuilder,
			[Frozen]Mock<IHttpRequestSpecificationsTransformer> mockTransformer,
            DefaultHttpRequestResolver sut,
			Mock<IHttpRequestBuilderOptions> options,
            IAsyncQuery<string> query,
			IHttpRequestSpecification specs,
			IHttpRequest expected
			)
		{
			//arrange
			mockSpecResolver.Setup(m => m.ResolveHttpRequestSpecification(query)).Returns(specs);
			mockTransformer.Setup(m => m.TransformHttpSpecificationsToHttpBuilderOptions(specs, query))
				.ReturnsTask(options.Object);
			options.Setup(m => m.ToRequest(mockBuilder.Object)).Returns(expected);

			//act
			var actual = await sut.ResolveHttpRequest(query);

			//assert
			actual.Should().Be(expected);
		}
Exemple #22
0
 public Task <IList <TResponse> > ExecuteAsyncQuery <TResponse>(IAsyncQuery <TResponse> query)
 {
     return(_mediator.SendAsync(query));
 }
		public void Resolve_VerifyGuardClause(GuardClauseAssertion assertion, IAsyncQuery<string> query)
		{
			assertion.Verify<DefaultHttpRequestResolver>(d => d.ResolveHttpRequest(query));
		}
 public async Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query)
 {
     return(await GetProcessor(query).HandleAsync(query));
 }
        public async Task <QueryExecutionResult <TResult> > ExecuteAsync <TSource, TResult>(IAsyncQuery <TSource, TResult> query, IQueryContext context)
        {
            if (query is IAsyncQuery <TExecutorSource, TResult> typedQuery)
            {
                TResult result = await ExecuteAsync <TResult>(typedQuery, context);

                return(result);
            }

            return(default);
        public Task <TResponse> SendAsync <TResponse>(IAsyncQuery <TResponse> request)
        {
            var wrapper = GetWrapper <AsyncWrapperQueryHandler <TResponse>, TResponse>(request, typeof(IAsyncQueryHandler <,>), typeof(AsyncWrapperQueryHandler <,>));

            return(wrapper.Handle(request));
        }
Exemple #27
0
        public async Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query)
        {
            var rsp = await GetClientForQuery(query).Execute <IAsyncQuery <TResult>, TResult>(query, default);

            return(rsp.Value);
        }
Exemple #28
0
        public async Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query, CancellationToken cancellationToken)
        {
            var rsp = await GetClientForQuery(query).Execute <IAsyncQuery <TResult>, TResult>(query, cancellationToken);

            return(rsp.Value);
        }
 public abstract Task <TResponse> Handle(IAsyncQuery <TResponse> message);
Exemple #30
0
 public void Resolve_VerifyGuardClause(GuardClauseAssertion assertion, IAsyncQuery <string> query)
 {
     assertion.Verify <DefaultHttpRequestResolver>(d => d.ResolveHttpRequest(query));
 }
Exemple #31
0
 public Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query)
 {
     return(HandleAsync(query, CancellationToken.None));
 }
 public async Task <TResult> HandleAsync <TResult>(IAsyncQuery <TResult> query, CancellationToken cancellationToken)
 {
     return(await GetProcessor(query).HandleAsync(query, cancellationToken));
 }
Exemple #33
0
 public virtual Task <TResult> QueryAsync <TContext, TResult>(IAsyncQuery <TContext, TResult> query)
 {
     return(Invoker.QueryAsync(query, GetContext <TContext>()));
 }
Exemple #34
0
 public AsyncQueryCache(
     IAsyncQuery <TIn, TOut> query,
     IConcurrentDictionaryFactory <TIn, Task <TOut> > factory)
     : base(query, factory)
 {
 }
Exemple #35
0
 public Task <T> QueryAsync <T>(IAsyncQuery <T> query, CancellationToken cancellationToken = default)
 => Retry.DoAsync(() => query.ExecuteAsync(_connection, _transaction, cancellationToken), _retryOptions);