Я пытаюсь улучшить производительность sql-запросов с помощью hotchocolate. Для этого я хотел получить доступ к запросу, сгенерированному hotchololate, на другом уровне моего приложения. Единственный способ, которым я мог это сделать, - это перехватить запрос, сохранить необходимую мне информацию в элементах HttpContext, а затем внедрить IHttpContextAccessor там, где мне это нужно.
services.AddQueryRequestInterceptor(GraphQLRequestInterceptor);
...
private Task GraphQLRequestInterceptor(HttpContext context, IQueryRequestBuilder requestBuilder, CancellationToken cancellationToken)
{
IReadOnlyQueryRequest request = requestBuilder.Create();
context.Items.Add("graph", request);
}
А затем восстановите его, введя IHttpContextAccessor
public ClientesQueries(Microsoft.AspNetCore.Http.IHttpContextAccessor contextAccessor)
{
var queryRequest = contextAccessor.HttpContext.Items["graph"] as IReadOnlyQueryRequest;
}
С помощью этого кода я могу создать выражение для запроса моей базы данных только для тех данных, которые были запрошены клиентом.
Есть ли лучший способ добиться этого?