Определение FieldNameConverter внутри GraphQL.Types.Schema не работает в ядре asp.net - PullRequest
0 голосов
/ 25 ноября 2018

Я использую graphql-dotnet и graphql-dotnet сервер с ядром asp.net.Я настроил схему следующим образом.

public class PdsGraphQlSchema: Schema
{
    public PdsGraphQlSchema()
    {
        FieldNameConverter = new PascalCaseFieldNameConverter();
        Query = CommonServiceLocator.ServiceLocator.Current.GetInstance<GraphQlQueries>();
        Mutation = CommonServiceLocator.ServiceLocator.Current.GetInstance<GraphQlMutations>();
    }
}

Здесь я добавил FieldNameConverter = new PascalCaseFieldNameConverter();но я не получаю изменения на выходе.Вывод всегда верблюжий.Как я могу игнорировать верблюжий корпус или использовать корпус Паскаля.

Для ConfigureServices я использовал следующие

services.AddGraphQL(_ =>
            {
                _.EnableMetrics = true;
                _.ExposeExceptions = true;
            });

services.AddSingleton ();

и внутри Configure IИспользовали следующие

app.UseGraphQL<PdsGraphQlSchema>();
app.UseGraphQLPlayground(new GraphQLPlaygroundOptions
{   Path = "/ui/playground" });

В ожидании вашей помощи.

1 Ответ

0 голосов
/ 27 ноября 2018

Для этой проблемы это вызвано DefaultGraphQLExecuter не установлен FieldNameConverter в GetOptions.

Попробуйте решения ниже:

  • Пользовательские DefaultGraphQLExecuter.

    public class MyDefaultGraphQLExecuter<TSchema> : DefaultGraphQLExecuter<TSchema>
         where TSchema : ISchema
    {
    
        public MyDefaultGraphQLExecuter(TSchema schema, IDocumentExecuter documentExecuter, IOptions<GraphQLOptions> options, IEnumerable<IDocumentExecutionListener> listeners, IEnumerable<IValidationRule> validationRules) 
            : base(schema, documentExecuter, options, listeners, validationRules)
        {
        }
    
        protected override ExecutionOptions GetOptions(string operationName, string query, Inputs variables, object context, CancellationToken cancellationToken)
        {
            var options = base.GetOptions(operationName, query, variables, context, cancellationToken);
            options.FieldNameConverter = Schema.FieldNameConverter;
            return options;
        } 
    }
    
  • Заменить встроенный DefaultGraphQLExecuter

                services.AddGraphQL(options =>
            {
                options.EnableMetrics = true;
                options.ExposeExceptions = Environment.IsDevelopment();                
                //options.
            })
            .AddWebSockets()
            .AddDataLoader();
    
            services.AddMvc();
    
            services.AddTransient(typeof(IGraphQLExecuter<>), typeof(MyDefaultGraphQLExecuter<>));
    
...