Базовое решение graphql .NET - невозможно включить связанные объекты - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в graphql и использую его в базовом решении .Net.Мое решение включает в себя базу данных SQlite, доступ к которой можно получить через менеджер.Я использую менеджер в функциях распознавателя в моем GraphTypes.В моделях у меня есть класс 'Ticket' и класс 'TicketResponse' - один билет включает в себя список ticketResponses.

Проблема в том, что я не могу включить вложенные данные ObjectGraphType. Вот мой код:

namespace SupportCenter.Schema.GraphQLTypes
{
    public class TicketType : ObjectGraphType<Ticket>
    {
        public TicketType(ITicketManager manager)
        {
            Name = "Ticket";
            Field(x => x.Id, type: typeof(IdGraphType)).Description("The id of the ticket");
            Field(x => x.AccountId).Description("THe account the ticket was issued from");
            Field(x => x.Text).Description("The description of the problem");
            Field(x => x.DateOpened).Description("The date the ticket was opened");
            Field<TicketStateEnum>("state", resolve: context => context.Source.State);
            Field<ListGraphType<TicketResponseType>>("ticketresponses",
              resolve: context => manager.GetTicketResponses(context.Source.Id));
        }
    }
}

Я получаю следующую ошибку:

"GraphQL.ExecutionError: Нет службы дляТип 'GraphQL.Types.ObjectGraphType 1[SupportCenter.Schema.GraphQLTypes.TicketType]' has been registered. ---> System.InvalidOperationException: No service for type 'GraphQL.Types.ObjectGraphType 1 [SupportCenter.Schema.GraphQLTypes.TicketType]' был зарегистрирован. \ n в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider.TypeTyTypeSpecyTyQL) atypesTyTyTyTySpecT atQL, attypeTySQL, attypeTySQL, attypeTyQLTQL.Schema.b__56_2 (Тип type) \ n в GraphQL.Types.GraphTypesLookup.AddTypeIfNotRegistered (Тип тип, контекст TypeCollectionContext) \ n в GraphQL.Types.GraphTypesLookup.HandleField (Тип parentType, контекст FieldTylection Graph в поле TypeTolpe в типе.Types.n на GraphQL.Types.GraphTypesLookup.HandleField (Тип parentType, поле FieldType, контекст TypeCollectionContext) \ n в GraphQL.Types.GraphTypesLookup.AddType (тип IGraphType, контекст TypeCollectionContext) \ n в GraphQL.Types.GraphTypesLookup.Create (функция 1011 * * 125)1.ViaFactory (режим LazyThreadSafetyMode) \ n --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- \ n в System.Lazy`1.CreateValue () \ n в GraphQL.Types.Schema.get_AllTypes ()\ n в GraphQL.Instrumentation.FieldMiddlewareBuilder.ApplyTo (схема ISchema) \ n в GraphQL.DocumentExecuter.ExecuteAsync (параметры ExecutionOptions) \ n --- Конец внутренней трассировки стека исключений --- ",

Я зарегистрировал оба TicketType и TicketResponseType в службах в файле запуска.Есть идеи, что я делаю не так?

Вот мой файл запуска:

public class Startup
    {

        public void ConfigureServices(IServiceCollection services)
        {   
            services.AddMvc();

            services.AddSingleton<SupportCenterDbContext>();

            services.AddSingleton<TicketType>();
            services.AddSingleton<TicketInputCreateType>();
            services.AddSingleton<TicketResponseType>();
            services.AddSingleton<TicketStateEnum>();
            services.AddSingleton<ResponseQuery>();
            services.AddSingleton<ITicketManager, TicketManager>();

            services.AddSingleton<SupportCentreQuery>();
            services.AddSingleton<TicketsQuery>();
            services.AddSingleton<TicketsMutation>();

            services.AddSingleton<SupportCentreSchema>();

            services.AddSingleton<IDependencyResolver>(
                c => new FuncDependencyResolver(c.GetRequiredService));

            services.AddSingleton<IDocumentExecuter, DocumentExecuter>();
            services.AddSingleton<IDocumentWriter, DocumentWriter>();

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

            services.AddSingleton<IGraphQLExecuter<SupportCentreSchema>, DefaultGraphQLExecuter<SupportCentreSchema>>();

            services.AddGraphQL(options =>
                {
                    options.EnableMetrics = true;
                    options.ExposeExceptions = true;
                })
                .AddWebSockets()
                .AddDataLoader();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

                 app.UseDefaultFiles();
                 app.UseStaticFiles();

                 app.UseGraphQL<SupportCentreSchema>("/graphql");

                 app.UseGraphiQLServer(new GraphiQLOptions
                 {
                    GraphiQLPath = "/ui/graphiql",
                    GraphQLEndPoint = "/graphql"
                 });

                 app.UseMvc();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...