使用 HotChocolate 查询组织
Query organization with HotChocolate
我正在尝试以这种方式组织我的查询
public class RootQueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Include<UserQuery>().Name("userQuery");
descriptor.Include<MessageQuery>().Name("messageQuery");
}
}
但在我的 Altair 操场上,我最终得到了这个:
没有userQuery
,但我仍然可以从中查询字段。我认为这不是 Include 的工作方式,我正在寻找一种方法来分离 messageQuery 和 userQuery。
Include 将包含类型的所有字段合并到当前类型中。 Name
指的是当前类型的名称。为了在您的类型中获得另一个级别,只需创建一个 returns 新类型的字段。
您知道吗,您不需要这些类型描述符,而是可以用纯 C# 表达一切。
public class Query
{
public UserQuery GetUsers() => new UserQuery();
}
public class UserQuery
{
...
}
这将导致:
type Query {
users: UserQuery
}
type UserQuery {
# ...
}
Include
returns 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>()
我正在尝试以这种方式组织我的查询
public class RootQueryType : ObjectType
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Include<UserQuery>().Name("userQuery");
descriptor.Include<MessageQuery>().Name("messageQuery");
}
}
但在我的 Altair 操场上,我最终得到了这个:
没有userQuery
,但我仍然可以从中查询字段。我认为这不是 Include 的工作方式,我正在寻找一种方法来分离 messageQuery 和 userQuery。
Include 将包含类型的所有字段合并到当前类型中。 Name
指的是当前类型的名称。为了在您的类型中获得另一个级别,只需创建一个 returns 新类型的字段。
您知道吗,您不需要这些类型描述符,而是可以用纯 C# 表达一切。
public class Query
{
public UserQuery GetUsers() => new UserQuery();
}
public class UserQuery
{
...
}
这将导致:
type Query {
users: UserQuery
}
type UserQuery {
# ...
}
Include
returns 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>()