По умолчанию GraphQL. NET использует Activator.CreateInstance
для создания классов, но для этого требуется конструктор без параметров. Если вы хотите использовать Dependency Injection с GraphQL. NET, вам нужно присвоить Схеме IServiceProvider
.
public LessonSchema(IServiceProvider sp)
{
this._schema = Schema.For(@"
type Lesson {
id: ID,
title: String,
level: String,
exercises : [String]
}
type Query {
lessons: [Lesson],
lesson(id: ID): [Lesson]
}
", _ =>
{
_.ServiceProvider = sp;
_.Types.Include<LessonQuery>();
});
Редактировать: я только что обнаружил, что в версии 2.4.0 бехвор отличался , Здесь вам нужно создать IDependencyResolver
вместо IServiceProvider
. Самый простой способ подключить существующее IServiceProvider
из ASP. NET Core к GraphQL. NET - это использовать FuncDependencyResolver
примерно так:
public LessonSchema(IServiceProvider sp)
{
this._schema = Schema.For(@"
type Lesson {
id: ID,
title: String,
level: String,
exercises : [String]
}
type Query {
lessons: [Lesson],
lesson(id: ID): [Lesson]
}
", _ =>
{
_.DependencyResolver = new FuncDependencyResolver(t => sp.GetService(t));
_.Types.Include<LessonQuery>();
});