You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Strawberry Shake集成GraphQL的构造函数定位错误及相关疑问

问题描述

使用Strawberry Shake创建GraphQL客户端时,通过HttpClient注册服务遇到错误:

无法找到类型'Common.Clients.LocationGqlApi.LocationGqlApi'的合适构造函数

疑问:

  1. 我哪里操作出错了?
  2. GraphQL集成与REST API集成是否存在差异?

相关代码:

Program.cs

services.AddHttpClient<ILocationGqlApi, LocationGqlApi>();

Service.cs

namespace Returns.Services
{
    public interface ILocationService
    {
        public Task<bool> IsSchedulingLocation(string locationCode);
    }

    public class LocationService : ILocationService
    {
        private readonly ILocationGqlApi _locationGqlApi;
        
        public LocationService(ILocationGqlApi locationGqlApi)
        {
            _locationGqlApi = locationGqlApi;
        }

        public async Task<bool> IsSchedulingLocation(string locationCode)
        {
            var locationQlResponse = await _locationGqlApi.LocationByCode.ExecuteAsync(locationCode, LocationConstants.Capability);

           // Do something
        }
    }
}
解答

1. 操作错误点

Strawberry Shake生成的GraphQL客户端不能直接用AddHttpClient注册,因为它的构造函数并非标准HttpClient注入的形式。Strawberry Shake有专属的服务注册方式,你得用它自动生成的扩展方法来注册客户端,而非手动通过AddHttpClient绑定接口与实现。

正确注册方式示例(Program.cs):

// AddLocationGqlApi是Strawberry Shake生成代码时自动创建的扩展方法
services.AddLocationGqlApi()
    .ConfigureHttpClient(client =>
    {
        client.BaseAddress = new Uri("你的GraphQL API地址");
    });

你之前直接调用AddHttpClient<ILocationGqlApi, LocationGqlApi>(),DI容器找不到LocationGqlApi的合适构造函数,原因是它的构造函数依赖Strawberry Shake内部的客户端组件,而非直接的HttpClient实例。

2. GraphQL集成与REST API集成的差异

  • 客户端生成逻辑:REST一般手动封装HttpClient或用Refit等工具生成代理;Strawberry Shake基于GraphQL Schema生成强类型客户端,内置查询、突变的类型安全方法,无需手动拼接请求内容。
  • 服务注册方式:REST可直接用AddHttpClient注册自定义API服务;Strawberry Shake必须用自身提供的扩展方法注册,因为它内部封装了GraphQL请求的序列化、缓存、订阅等专属逻辑,依赖特定的服务注入链。
  • 请求模式:REST是多端点资源模式,每个资源对应一个接口;GraphQL通常是单端点(如/graphql),通过不同的查询/突变体获取或修改数据,一次请求可获取多个关联资源,减少网络请求次数。
  • 类型安全程度:Strawberry Shake生成的客户端完全贴合Schema,返回类型和参数都是强类型,编译阶段就能发现错误;REST需要手动定义DTO,容易出现类型不匹配、字段遗漏等问题。

内容的提问来源于stack exchange,提问作者GThree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:53:17