Как получить доступ к значениям аргументов в полях GraphQL при использовании GraphQL.Net с С#?

Рассмотрим следующий запрос;

query {
  droid(id: "123") {
    id
    name
  }
}

Я могу получить доступ к аргументу запроса id на сервере при использовании GraphQL.net следующим образом;

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

public class DroidType : ObjectGraphType
{
  public DroidType()
  {
    Field<NonNullGraphType<IdGraphType>>("id");
    Field<StringGraphType>("name");
  }
}

public class StarWarsQuery : ObjectGraphType
{
  private List<Droid> _droids = new List<Droid>
  {
    new Droid { Id = "123", Name = "R2-D2" }
  };

  public StarWarsQuery()
  {
    Field<DroidType>(
      "droid",
      arguments: new QueryArguments(
        new QueryArgument<IdGraphType> { Name = "id" }
      ),
      resolve: context =>
      {
        var id = context.GetArgument<string>("id");//<---- THIS
        return _droids.FirstOrDefault(x => x.Id == id);
      }
    );
  }
}

Но как бы я обработал такой запрос;

query {
  droid(id: "123") {
    id
    name
    owner(id: "456") {
      id
      name
    }
  }
}

Это не лучший пример, но я ожидал бы создать OwnerType и добавить новое поле в мой DriodType;

public class DroidType : ObjectGraphType
{
  public DroidType()
  {
    Field<NonNullGraphType<IdGraphType>>("id");
    Field<StringGraphType>("name");
    Field<OwnerType>(
      "owner",
      arguments: new QueryArguments(
        new QueryArgument<IdGraphType> { Name = "id" }
      ),
      resolve: context =>
      {
        var id = context.GetArgument<string>("id");
        return _owners.FirstOrDefault(x => x.Id == id);
      }
    );
  }
}

Вот моя проблема, мне нужен только владелец с идентификатором 456, если ему принадлежал дроид с идентификатором 123. Для этого мне нужно будет отфильтровать владельцев, чтобы включить только тех, кто владел дроидом 123. Для этого мне нужно иметь доступ к идентификатору дроида из поля владельца DroidType, т.е. я хотел бы получить доступ значение аргумента поля droid в StarWarsQuery из поля владельца в DroidType. Как бы я это сделал?


person mark_h    schedule 01.10.2020    source источник


Ответы (1)


Контекст в аргументе разрешения для поля владельца имеет свойство Source, которое содержит информацию о типе дроида. Я смог получить необходимую мне информацию оттуда

person mark_h    schedule 03.10.2020