Схема HotChocolate (GraphQL) первый подход для сложного типа - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок в HotChocolate и пытаюсь использовать Po C. Я создал очень простой файл .graphql:

#camera.graphql

type Camera {
    id: ID!
    name: String!
}

type Query {
    getCamera: Camera!
}

И очень простой. NET код для переноса камеры:

    public class QlCamera
    {
        public static QlCamera New()
        {
            return new QlCamera
            {
                Id = Guid.NewGuid().ToString(),
                Name = Guid.NewGuid().ToString()
            };
        }

        public string Id { get; set; }
        public string Name { get; set; }
    }

, а также такой код для создания схемы:

   public void CreateSchema()
   {
        string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

        var smBuilder = SchemaBuilder.New();
        smBuilder.AddDocumentFromFile(path + "/GraphQL/camera.graphql");

        smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());

        var schema = smBuilder.Create();
   }

В последней строке, однако, я получаю исключение: HotChocolate.SchemaException: 'Произошло несколько ошибок схемы: поле Camera.id не имеет преобразователя. - Тип: Камера Поле Camera.name не имеет резольвера. - Тип: Камера '

Я пытался создать:

    public class QlCameraType : ObjectType<QlCamera>
    {
        protected override void Configure(IObjectTypeDescriptor<QlCamera> descriptor)
        {
            descriptor.Name("Camera");

            descriptor.Field(t => t.Id).Type<NonNullType<StringType>>();
            descriptor.Field(t => t.Name).Type<StringType>();
        }
    }

и заменить

smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());

на

smBuilder.AddResolver("Query", "getCamera", () => new QlCameraType());

Но Я продолжаю получать то же исключение.

Очевидно, что я что-то здесь упускаю, но я не могу понять, что именно. Может ли кто-нибудь объяснить мне, что я пропускаю?

(я несколько раз проходил через документацию, но не могу найти там соответствующую помощь)

1 Ответ

0 голосов
/ 30 марта 2020

Как ясно указывает исключение - для определенных полей ("id" и "name") типа / объекта "Камера" нет привязки револьверов.

Так что их просто нужно добавить с помощью:

smBuilder.AddResolver("Camera", "id", rc => rc.Parent<QlCamera>().Id);
smBuilder.AddResolver("Camera", "name", rc => rc.Parent<QlCamera>().Name);

И это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...