Можно ли создать Graphql Generic Type - PullRequest
0 голосов
/ 19 мая 2018

Мне нужен тип пагинации для GraphQL в ядре asp.net.

Я пытаюсь код ниже для типа:

using GraphQL.Types;
using WebApi.Data.Entities.Models;
using WebApi.Dtos;
using WebApi.Helpers;
using WebApi.Services;

namespace WebApi.Data.Entities.Graphql.GraphQueryTypes
{
    public class PagedResultType<T>: ObjectGraphType<T> where T : class
    {
        public PagedResultType()
        {
            Name = "PagedResultType";
            Field<IntGraphType>("CurrentPage");
            Field<IntGraphType>("PageCount");
            Field<IntGraphType>("PageSize");
            Field<IntGraphType>("RowCount");
            Field<IntGraphType>("FirstRowOnPage");
            Field<IntGraphType>("LastRowOnPage");
            Field<ListGraphType<T>>("Results");
        }
    }
}

Также я пытаюсь создать Field наRootQuery:

    Field<PagedResultType<ComplaintSourceDTO>>(
        "complaintSourceTypes",
        arguments: new QueryArguments(
            new QueryArgument<IntGraphType> { Name = "page", Description = "Sayfalama için sayfa " },
            new QueryArgument<IntGraphType> { Name = "pageSize", Description = "Sayfalama için gerekli sayfa sayısı" }
        ),
        resolve: context => complaintSourceService.GetDataWithPaged(context.GetArgument<int>("page"), context.GetArgument<int>("pageSize"))
    );

Но он говорит как ошибка:

Тип 'T' нельзя использовать в качестве параметра типа 'T' в универсальном типе или методе 'ListGraphType».Не существует неявного преобразования ссылок из 'T' в 'GraphQL.Types.IGraphType'.

Так возможно ли создать универсальный тип объекта графа?

Как я могу получить это?

Спасибо

1 Ответ

0 голосов
/ 19 мая 2018

ListGraphType<T> определяется как

public class ListGraphType<T> : ListGraphType
    where T : IGraphType
{
    public ListGraphType()
        : base(typeof(T))
    {
    }
}

Это сообщение подразумевает, что вы пропускаете ограничение IGraphType , из которого должен быть получен аргумент типа, если выхотите использовать его с ListGraphType<>

public class PagedResultType<T>: ObjectGraphType<T> where T : class, IGraphType {

    //...
}

Добавление ограничения теперь означает, что любой аргумент типа, используемый с результатом страницы, должен быть получен из IGraphType

Например

public class ComplaintSourceDTO: ObjectGraphType<ComplaintSourceDTO> { 
    //... 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...