Сообщение «Конструктор без параметров определен для типа SiteResourceGraphType» при внедрении хранилища в SiteResourceGraphType - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть класс 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 без параметров остается. Я очень устал выяснять, чего мне не хватает. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 08 ноября 2019

Я должен извиниться за этот пост. Проблема была на моей стороне во внешнем сервисе, который регистрирует мой сервис GraphQL. Я не мог понять это, так как ошибка не указывала на внешнее обслуживание, и это не было очевидно для меня. Поэтому, пожалуйста, закройте этот пост или удалите его.

...