public PagedResult <TResult> Execute <TResult>(int pageNumber, int itemsPerPage, IPagedQuery <TResult> query) { var handlerType = typeof(IPagedQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult)); dynamic queryHandler = _lifetimeScope.Resolve(handlerType); int skip = (pageNumber - 1) * itemsPerPage; int take = itemsPerPage; return(queryHandler.Handle(skip, take, (dynamic)query) as PagedResult <TResult>); }
public Task <IPagedEnumerable <TResult> > ExecuteAsync <TResult>(IPagedQuery <TResult> query, CancellationToken cancellationToken = default) where TResult : class { if (query is null) { throw new ArgumentNullException(nameof(query)); } var queryType = query.GetType(); var handler = (PagedQueryHandlerWrapper <TResult>)_pagedQueryHandlers.GetOrAdd(queryType, t => Activator.CreateInstance(typeof(PagedQueryHandlerWrapperImpl <,>).MakeGenericType(queryType, typeof(TResult)))); return(handler.Execute(query, cancellationToken, this.container)); }