/// <inheritdoc />
        public virtual async Task <IReadOnlyCollection <TResource> > GetAsync()
        {
            _traceWriter.LogMethodStart();

            _hookExecutor?.BeforeRead <TResource>(ResourcePipeline.Get);

            if (_options.IncludeTotalResourceCount)
            {
                var topFilter = _queryLayerComposer.GetTopFilter();
                _paginationContext.TotalResourceCount = await _repository.CountAsync(topFilter);

                if (_paginationContext.TotalResourceCount == 0)
                {
                    return(Array.Empty <TResource>());
                }
            }

            var queryLayer = _queryLayerComposer.Compose(_request.PrimaryResource);
            var resources  = await _repository.GetAsync(queryLayer);

            if (_hookExecutor != null)
            {
                _hookExecutor.AfterRead(resources, ResourcePipeline.Get);
                return(_hookExecutor.OnReturn(resources, ResourcePipeline.Get).ToArray());
            }

            if (queryLayer.Pagination?.PageSize != null && queryLayer.Pagination.PageSize.Value == resources.Count)
            {
                _paginationContext.IsPageFull = true;
            }

            return(resources);
        }
        public virtual async Task <IReadOnlyCollection <TResource> > GetAsync()
        {
            _logger.LogTrace($"Entering {nameof(GetAsync)}().");

            _hookExecutor?.BeforeRead <TResource>(ResourcePipeline.Get);

            if (_options.IncludeTotalResourceCount)
            {
                var topFilter = _queryLayerComposer.GetTopFilter();
                _paginationContext.TotalResourceCount = await _repository.CountAsync(topFilter);
            }

            var queryLayer = _queryLayerComposer.Compose(_currentRequest.PrimaryResource);
            var resources  = await _repository.GetAsync(queryLayer);

            if (_hookExecutor != null)
            {
                _hookExecutor.AfterRead(resources, ResourcePipeline.Get);
                return(_hookExecutor.OnReturn(resources, ResourcePipeline.Get).ToList());
            }

            return(resources);
        }