Я новичок в 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();
}
}