Может ли объект типа ввода содержать свойство типа интерфейса?
Я только начал изучать 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".
Кстати: если удалить интерфейс, все будет работать.
Что нужно настроить для правильной работы со свойствами типа интерфейса?
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()
Меня устраивает.