首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从程序集“GraphQL、Version=3.0.0.0、Culture=neutral、PublicKeyToken=null”加载类型“Culture=neutral”

无法从程序集“GraphQL、Version=3.0.0.0、Culture=neutral、PublicKeyToken=null”加载类型“Culture=neutral”
EN

Stack Overflow用户
提问于 2020-07-24 18:33:05
回答 1查看 1.5K关注 0票数 4

该错误在到达services.AddGraphQL时发生。

我试着降低GraphQL至2.4版本的级别,但后来FuncServiceProvider停止了工作。

我现在拥有的是:

MarketScheme.cs

代码语言:javascript
复制
public class MarketScheme : Schema
{
   public MarketScheme(IServiceProvider provider) : base(provider)
   {
        Query = provider.GetRequiredService<AppQuery>();
   }
}

Startup.cs

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<marketContext>();

    services.AddScoped<IMarketRepository, MarketRepository>();

    services.AddScoped<IProductRepository, ProductRepository>();

    services.AddScoped<IServiceProvider>(provider => new FuncServiceProvider(provider.GetRequiredService));

    services.AddScoped<MarketScheme>();

    services.AddGraphQL(options =>
    {
        options.ExposeExceptions = true;
        options.EnableMetrics = true;
    }).AddGraphTypes(ServiceLifetime.Scoped);

    services.AddControllers();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 18:52:23

这有两部分。

  1. 接口GraphQL.Http.IDocumentWriter移到GraphQL.IDocumentWriter
  2. 将JSON序列化提取到两个不同的库中,即GraphQL.NewtonsoftJsonGraphQL.SystemTextJson

如果您正在使用服务器项目,则需要使用更新到4.x。

如果您已经编写了自己的中间件,则使用请参阅2.x到3.0升级指南

Newtonsoft.Json实例

代码语言:javascript
复制
using Newtonsoft.Json;

private static async Task ExecuteAsync(HttpContext context, ISchema schema)
{
    GraphQLRequest request;
    using (var reader = new StreamReader(context.Request.Body))
    using (var jsonReader = new JsonTextReader(reader))
    {
        var ser = new JsonSerializer();
        request = ser.Deserialize<GraphQLRequest>(jsonReader);
    }

    var executer = new DocumentExecuter();
    var result = await executer.ExecuteAsync(options =>
    {
        options.Schema = schema;
        options.Query = request.Query;
        options.OperationName = request.OperationName;
        options.Inputs = request.Variables.ToInputs();
    });

    context.Response.ContentType = "application/json";
    context.Response.StatusCode = result.Errors?.Any() == true ? (int)HttpStatusCode.BadRequest : (int)HttpStatusCode.OK;

    var writer = new GraphQL.NewtonsoftJson.DocumentWriter();
    await writer.WriteAsync(context.Response.Body, result);
}

public class GraphQLRequest
{
    public string OperationName { get; set; }
    public string Query { get; set; }
    public Newtonsoft.Json.Linq.JObject Variables { get; set; }
}

System.Text实例

代码语言:javascript
复制
using System.Text.Json;

private static async Task ExecuteAsync(HttpContext context, ISchema schema)
{
    var request = await JsonSerializer.DeserializeAsync<GraphQLRequest>
    (
        context.Request.Body,
        new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
    );

    var executer = new DocumentExecuter();
    var result = await executer.ExecuteAsync(options =>
    {
        options.Schema = schema;
        options.Query = request.Query;
        options.OperationName = request.OperationName;
        options.Inputs = request.Variables.ToInputs();
    });

    context.Response.ContentType = "application/json";
    context.Response.StatusCode = 200; // OK

    var writer = new GraphQL.SystemTextJson.DocumentWriter();
    await writer.WriteAsync(context.Response.Body, result);
}

public class GraphQLRequest
{
    public string OperationName { get; set; }

    public string Query { get; set; }

    [JsonConverter(typeof(GraphQL.SystemTextJson.ObjectDictionaryConverter))]
    public Dictionary<string, object> Variables { get; set; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63079557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档