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