private async Task <TResult> ExecuteQueryAsync <TQuery, TResult>(TQuery query, IExecutionContext executionContext) where TQuery : IQuery <TResult> { if (query == null) { return(default(TResult)); } var cx = await CreateExecutionContextAsync(executionContext); var handler = _queryHandlerFactory.CreateAsyncHandler <TQuery, TResult>(); if (handler == null) { throw new MissingHandlerMappingException(typeof(TQuery)); } _modelValidationService.Validate(query); _executePermissionValidationService.Validate(query, handler, cx); var result = await handler.ExecuteAsync(query, cx); return(result); }