我正在尝试以这种方式组织我的查询
public class RootQueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Include<UserQuery>().Name("userQuery");
descriptor.Include<MessageQuery>().Name("messageQuery");
}
}但在我的牛郎星游乐场上,我得到了这样的结果:

虽然没有userQuery,但我仍然可以从其中查询字段。我认为这不是Include应该工作的方式,我正在寻找一种分离messageQuery和userQuery的方法。
发布于 2021-03-29 02:38:25
Include将包含类型的所有字段合并到当前类型中。Name是指当前类型的名称。为了在您的类型中获得另一个级别,只需创建一个返回新类型的字段。
你知道吗,你不需要这些类型描述符,而是可以用纯C#来表达所有的东西。
public class Query
{
public UserQuery GetUsers() => new UserQuery();
}
public class UserQuery
{
...
}这将导致:
type Query {
users: UserQuery
}
type UserQuery {
# ...
}发布于 2021-03-29 02:45:25
Include返回IObjectTypeDescriptor,所以您要做的就是设置RootQueryType的名称
如果我理解正确的话,您希望能够像这样查询:
{
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())
}
}如果您想要实际组合这些类型,并能够创建如下查询:
{
userName
message
}您可以使用ObjectTypeExtensions
[ExtendObjectType("Query")]
public class UserQuery {
public string GetUserName() => ...
}
[ExtendObjectType("Query")]
public class MessageQuery {
public string Message() => ...
}然后您可以执行以下操作
services.AddGraphQLServer()
.AddQueryType(x => x.Name("Query"))
.AddTypeExtension<UserQuery>()
.AddTypeExtension<MessageQuery>()https://stackoverflow.com/questions/66843777
复制相似问题