如何在C# WinForms中使用Strawberry Shake GraphQL?
在C# WinForms中使用Strawberry Shake对接HotChocolate GraphQL服务器
以下是针对C#新手的分步操作指南:
1. 安装NuGet包
打开WinForms项目的NuGet包管理器,安装以下包:
StrawberryShake.Runtime:核心运行库StrawberryShake.Tools:用于生成GraphQL客户端代码的工具Microsoft.Extensions.DependencyInjection:用于依赖注入管理客户端实例
2. 添加GraphQL配置文件
在项目根目录新建名为.graphqlrc.json的文件,内容如下(替换成你的HotChocolate服务器地址):
{ "schema": "http://localhost:5000/graphql", "documents": "**/*.graphql", "extensions": { "strawberryShake": { "name": "MyGraphQLClient", "namespace": "MyWinFormsApp.GraphQL", "output": "Generated/GraphQLClient.cs" } } }
说明:
schema:你的HotChocolate GraphQL服务器地址name:生成的客户端类名称namespace:客户端代码的命名空间output:生成代码的存放路径
3. 编写GraphQL查询
在项目中新建Queries.graphql文件,写入你的查询语句,比如:
query GetProducts { products { id name price } }
4. 生成客户端代码
打开Visual Studio的“包管理器控制台”,执行以下命令:
dotnet graphql init
执行完成后,会在你指定的output路径下生成客户端代码。
5. 配置依赖注入
在WinForms项目的Program.cs中,配置服务容器并注册GraphQL客户端:
using Microsoft.Extensions.DependencyInjection; using MyWinFormsApp.GraphQL; namespace MyWinFormsApp { internal static class Program { [STAThread] static void Main() { // 配置服务 var services = new ServiceCollection(); services.AddMyGraphQLClient() .ConfigureHttpClient(client => client.BaseAddress = new Uri("http://localhost:5000/graphql")); var serviceProvider = services.BuildServiceProvider(); // 启动窗体 ApplicationConfiguration.Initialize(); Application.Run(new MainForm(serviceProvider.GetRequiredService<IMyGraphQLClient>())); } } }
6. 在窗体中使用客户端
修改MainForm的构造函数,注入客户端实例,然后在控件事件中调用查询:
using MyWinFormsApp.GraphQL; namespace MyWinFormsApp { public partial class MainForm : Form { private readonly IMyGraphQLClient _graphQLClient; public MainForm(IMyGraphQLClient graphQLClient) { InitializeComponent(); _graphQLClient = graphQLClient; } private async void btnLoadProducts_Click(object sender, EventArgs e) { try { // 调用查询 var result = await _graphQLClient.GetProducts.ExecuteAsync(); // 处理结果 if (result.Data?.Products != null) { dataGridView1.DataSource = result.Data.Products.ToList(); } else if (result.Errors != null) { MessageBox.Show($"查询出错:{string.Join("\n", result.Errors.Select(x => x.Message))}"); } } catch (Exception ex) { MessageBox.Show($"请求失败:{ex.Message}"); } } } }
注意事项
- 确保HotChocolate服务器处于运行状态,并且地址与配置文件中的一致
- 如果生成代码时遇到问题,检查
.graphqlrc.json的路径和配置是否正确 - 异步操作要使用
async/await,避免阻塞UI线程
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

