private object GetHandler <TResult>(IQuerySpec <TResult> querySpec) { if (_dict.ContainsKey(querySpec.GetType())) { return(_dict[querySpec.GetType()]); } var handlerType = typeof(IQueryHandler <,>).MakeGenericType(querySpec.GetType(), typeof(TResult)); var handler = _serviceProvider.GetRequiredService(handlerType); _dict.Add(querySpec.GetType(), handler); return(handler); }
public async Task <TResult> ExecuteQuery <TResult>(IQuerySpec <TResult> querySpec) { var handler = GetHandler(querySpec); try { _logger.LogInformation($"Handling query {querySpec.GetType()}"); var result = await(Task <TResult>)((dynamic)handler).Handle((dynamic)querySpec); return(result); } catch (Exception e) { _logger.LogError(e, $"Query exception occured during handling of {querySpec.GetType()} query in {handler.GetType()}"); throw; //TODO: Decide if throwing is required } }
public Task <List <BudgetItemType> > GetListAsync(IQuerySpec <BudgetItemType> querySpec, CancellationToken cancellationToken) { throw new NotImplementedException(); }
public Task <List <BudgetItemType> > GetListAsync(IQuerySpec <BudgetItemType> querySpec) { throw new NotImplementedException(); }
public virtual Task <List <TEntity> > GetListAsync(IQuerySpec <TEntity> querySpec, CancellationToken cancellationToken = default(CancellationToken)) { throw new NotImplementedException(); }
public static Task <List <TEntity> > GetListAsync <TEntity>( this IEntityQuery <TEntity> repo, IQuerySpec <TEntity> querySpec) where TEntity : class { return(repo.GetListAsync(querySpec, default(CancellationToken))); }
/// <summary> /// Returns a query expression that, when enumerated, will retrieve only the objects that satisfy the where condition. /// </summary> public virtual Task <List <TEntity> > GetListAsync(IQuerySpec <TEntity> querySpec, CancellationToken cancellationToken) { return(QueryInternal(querySpec?.WhereExpression).ToListAsync(cancellationToken)); }