У меня есть класс SiteResourceGraphType
, который унаследован от ObjectGraphType
. SiteResourceGraphType
класс принимает IGenericRepository<Site, Guid>
для разрешения поля items
.
Когда я запускаю свое приложение, я получаю сообщение об ошибке «Не определен конструктор без параметров для типа SiteResourceGraphType».
Запуск
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ServiceDbContext>(options => options
.UseLazyLoadingProxies()
.UseInMemoryDatabase("GraphQLServiceDatabase"));
services.AddScoped(typeof(IGenericRepository<,>), typeof(GenericRepository<,>));
services.AddScoped<IServiceProvider>(x => new FuncServiceProvider(type => x.GetRequiredService(type)));
services.AddScoped<GraphQLServiceSchema>();
services.AddScoped<SiteResourceGraphType>();
services.AddScoped<SiteGraphType>();
services.AddScoped<LocationGraphType>();
services.AddScoped<LocationInputGraphType>();
services
.AddGraphQL(x =>
{
x.ExposeExceptions = true;
})
.AddGraphTypes(ServiceLifetime.Scoped)
.AddDataLoader();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseGraphQL<GraphQLServiceSchema>();
app.UseGraphQLPlayground(new GraphQLPlaygroundOptions());
}
}
Схема
public class GraphQLServiceSchema : Schema
{
public GraphQLServiceSchema(IServiceProvider serviceProvider) : base(serviceProvider)
{
Query = (IObjectGraphType) serviceProvider.GetService(typeof(GraphQLServiceQuery));
Mutation = (IObjectGraphType) serviceProvider.GetService(typeof(GraphQLServiceMutation));
}
}
Запрос Я использовал Организация запросов техника из graphql-dotnet docs
public class GraphQLServiceQuery : ObjectGraphType
{
public GraphQLServiceQuery()
{
Field<SiteResourceGraphType>("sites", resolve: context => new { });
}
}
Target GraphType
public class SiteResourceGraphType : ObjectGraphType
{
public SiteResourceGraphType(IGenericRepository<Site, Guid> siteRepository)
{
Field<StringGraphType>("resourceCode",
resolve: context => { return "RCODE1"; });
Field<ListGraphType<SiteGraphType>>("items",
resolve: context => siteRepository.GetAll());
}
}
Цель этого SiteResourceGraphType
- предоставить структуру ответакак это:
{
"sites": {
"resourceCode": "CODE1",
"items": [...]
},
...
}
Я просмотрел много постов из stackoverflow, github о DI в graphql-dotnet, я пробовал разные версии этой библиотеки (сейчас я использую «3.0». 0-preview-1271 "version).
Но проблема с ctor без параметров остается. Я очень устал выяснять, чего мне не хватает. Пожалуйста, помогите!