Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用GraphQL和.NET core调用Activator.CreateInstance_C#_Asp.net_Asp.net Core_Graphql - Fatal编程技术网

C# 无法使用GraphQL和.NET core调用Activator.CreateInstance

C# 无法使用GraphQL和.NET core调用Activator.CreateInstance,c#,asp.net,asp.net-core,graphql,C#,Asp.net,Asp.net Core,Graphql,执行查询时,我遇到以下错误:{“调用activator.createinstance失败。类型:api.graphql.lessonquery”} Lessonquery的构造函数如下所示: private readonly AppDbContext _db; public LessonQuery(AppDbContext dbContext) { _db = dbContext; } 我还添加了services.AddSingleton()到startup.

执行查询时,我遇到以下错误:
{“调用activator.createinstance失败。类型:api.graphql.lessonquery”}

Lessonquery的构造函数如下所示:

private readonly AppDbContext _db;

public LessonQuery(AppDbContext dbContext)
    {
        _db = dbContext;
    }
我还添加了
services.AddSingleton()
到startup.cs中的
ConfigureServices()

我在模式中包括我的LessonQuery类,如下所示

public LessonSchema()
{
    this._schema = Schema.For(@"

    type Lesson {
        id: ID,
        title: String,
        level: String,
        exercises : [String]
    }

    type Query {
        lessons: [Lesson],
        lesson(id: ID): [Lesson]
    }


", _ =>
    {
        _.Types.Include<LessonQuery>();

    });
public LessonSchema()
{
此._schema=schema.For(@)
打字课{
id:id,
标题:字符串,
级别:字符串,
练习:[字符串]
}
类型查询{
教训:[教训],
课程(id:id):[课程]
}
", _ =>
{
_.Types.Include();
});

我正在寻找修复此错误的方法?

默认情况下,GraphQL.NET使用
Activator.CreateInstance
来创建类,但这需要无参数构造函数。如果要对GraphQL.NET使用依赖项注入,则需要为架构分配一个
IServiceProvider

public LessonSchema(IServiceProvider sp)
{
此._schema=schema.For(@)
打字课{
id:id,
标题:字符串,
级别:字符串,
练习:[字符串]
}
类型查询{
教训:[教训],
课程(id:id):[课程]
}
", _ =>
{
_.ServiceProvider=sp;
_.Types.Include();
});
编辑:我刚刚发现behvior在版本2.4.0中有所不同。在这里,您需要创建一个
IDependencyResolver
而不是
IServiceProvider
。将现有的
IServiceProvider
从ASP.NET Core连接到GraphQL.NET的最简单方法是使用
FuncDependencyResolver
,如下所示:

public LessonSchema(IServiceProvider sp)
{
此._schema=schema.For(@)
打字课{
id:id,
标题:字符串,
级别:字符串,
练习:[字符串]
}
类型查询{
教训:[教训],
课程(id:id):[课程]
}
", _ =>
{
_.DependencyResolver=新函数DependencyResolver(t=>sp.GetService(t));
_.Types.Include();
});

My schema type似乎没有field ServiceProvider,我使用的类是GgraphQL.Types.schema我提供的解决方案是GraphQL.NET 3而不是2.4。我编辑了这篇文章以包含2.4的解决方案。我使用的是2.4。当我尝试在应用程序中实例化模式时,如
LessonSchema schema=new Less,您建议进行更改在Schema(…)
,我需要在这里传递什么?预期是
IServiceProvider
。但我不确定应该传递什么。@Rain336