Рассмотрим следующий запрос;
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. Как бы я это сделал?