如何解决如何处理每个资源的多个查询?
我想用 .NET Core 使用 GraphQL 和 GraphiQL 包创建一个 GraphQL API。我为用户创建了一个查询,为任务创建了一个查询
public sealed class UserQuery : ObjectGraphType
{
private List<User> users = new List<User>();
public UserQuery()
{
Field<ListGraphType<UserType>>(
"users","Returns a collection of users.",resolve: context => users);
}
}
public sealed class TaskQuery : ObjectGraphType
{
private List<Task> tasks = new List<Task>();
public TaskQuery()
{
Field<ListGraphType<TaskType>>(
"tasks","Returns a collection of tasks.",resolve: context => tasks);
}
}
public sealed class UserSchema : GraphQL.Types.Schema
{
public UserSchema(UserQuery userQuery)
{
Query = userQuery;
}
}
public sealed class TaskSchema : GraphQL.Types.Schema
{
public TaskSchema(TaskQuery taskQuery)
{
Query = taskQuery;
}
}
不幸的是,我发现这是不可能的,因为我必须将 ISchema
注册为单例服务
serviceCollection
.AddSingleton<ISchema,UserSchema>()
.AddSingleton<ISchema,TaskSchema>();
所以 TaskSchema
覆盖了 UserSchema
。一种解决方案是使用一个单一架构和一个包含 UserQuery
和 TaskQuery
内容的查询,但事情很快就会变得混乱,不是吗?
分割资源有什么更好的想法吗?
我认为处理 100 个或更多字段时,事情可能会变得非常复杂。
解决方法
每个 GraphQL 模式都需要只包含一种查询类型:https://graphql.org/learn/schema/
一个端点只能显示一个模式。 如果你想把它分成多个文件,你可以使用部分类。
您可以使用分部类,但您可能必须执行一些反射魔法才能从 ctor 分发代码。例如,可以使用反射来调用类中以“Init”开头的任何方法。然后部分类可以声明 init 方法和他们需要的东西
或者,您也可以探索热巧克力,无需声明单个架构。您可以添加所有不同的查询类型,它们会自动合并。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。