Estoy intentando organizar mi consulta de esa manera
public class RootQueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Include<UserQuery>().Name("userQuery");
descriptor.Include<MessageQuery>().Name("messageQuery");
}
}
Pero en mi patio de juegos de Altair termino con esto:
No hay userQuery, pero aún puedo consultar campos desde allí. Creo que no es la forma en que debería funcionar Include y estoy buscando una manera de separar messageQuery y userQuery.
------------------------------------
Incluir fusiona todos los campos del tipo incluido en el tipo actual. Nombre se refiere al nombre del tipo actual. Para obtener otro nivel en su tipo, simplemente cree un campo que devuelva el nuevo tipo.
¿Sabías que no necesitas estos descriptores de tipo, sino que simplemente puedes expresartodo con C# puro.
public class Query
{
public UserQuery GetUsers() => new UserQuery();
}
public class UserQuery
{
...
}
Esto dará como resultado:
type Query {
users: UserQuery
}
type UserQuery {
# ...
}
------------------------------------
Incluir devuelve el IObjectTypeDescriptor
Entonces, lo que estás haciendo es configurar el nombre de RootQueryType
Si te entiendo correctamente, te gustaría poder realizar consultas así:
{
userQuery {
userName
}
messageQuery {
message
}
}
public class RootQueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Field("userQuery").Resolve(new UserQuery())
descriptor.Field("messageQuery").Resolve(new MessageQuery())
}
}
En caso de que desee combinar los tipos y poder crear una consulta como esta:
{
userName
message
}
Puedes utilizar extensiones de tipo de objeto
[ExtendObjectType("Query")]
public class UserQuery {
public string GetUserName() => ...
}
[ExtendObjectType("Query")]
public class MessageQuery {
public string Message() => ...
}
Entonces puedes hacer
services.AddGraphQLServer()
.AddQueryType(x => x.Name("Query"))
.AddTypeExtension<UserQuery>()
.AddTypeExtension<MessageQuery>()