Может ли объект типа ввода содержать свойство типа интерфейса?

Я только начал изучать GraphQL на платформе .net. Если объект типа ввода может содержать свойство типа интерфейса, то как его настроить в библиотеке HotChocolate?

Пример модели:

public interface ILocationFilter {
    double Lat { get; set;}
    double Lng { get; set;}
}

public class LocationFilter : ILocationFilter {
// ...
}

public class FilterModel {
    public string Search { get; set; }
    public ILocationFilter Location { get; set; } = new LocationFilter();
// ...
}

Пример запроса GraphQL:

public class Query {
    public IEnumerable<SomeModel> GetByFilter(FilterModel filter) {
// ...
    }
}

Пример Startup.cs:

// ...
services.AddGraphQL(SchemaBuilder.New()
                        .AddQueryType<Query>()
                        .Create(),
                    new QueryExecutionOptions { IncludeExceptionDetails = true });
// ...
    app.UseGrapQL();
// ...

Прямо сейчас я получаю исключение «Невозможно определить или разрешить тип схемы из ссылки на тип Input: ILocationFilter».

Кстати: если удалить интерфейс, все будет работать.

Что нужно настроить для корректной работы со свойствами типа интерфейса?


person Bohdan Dorokhin    schedule 29.05.2020    source источник


Ответы (1)


public class FilterModelType : InputObjectType<FilterModel> {
    protected override void Configure(IInputObjectTypeDescriptor<FilterModel> descriptor)
    {
        descriptor.Field(x => x.Location).Type(typeof(LocationFilter));
    }
}

Я добавил новый класс, описывающий FilterModel. После этого я также зарегистрировал этот тип в Startup.cs

 SchemaBuilder.New()
    .AddType<FilterModelType>()
    .AddQueryType<Query>()
    .Create() 

Меня устраивает.

person Bohdan Dorokhin    schedule 29.05.2020