gpt4 book ai didi

c# - 如何处理每个资源的多个查询?

转载 作者:行者123 更新时间:2023-12-04 08:20:51 24 4
gpt4 key购买 nike

我想使用 GraphQL 和 GraphiQL 包创建带有 .NET Core 的 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 方法和他们需要的东西
或者,您也可以探索热巧克力,无需声明单个模式。您可以添加所有不同的查询类型,它们会自动合并。

关于c# - 如何处理每个资源的多个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65504681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com