.NET 7: как использовать IApiDescriptionGroupCollectionProvider без app.UseEndpoints()

После преобразования в .NET 7 я получаю предупреждение ASP0014, говорящее мне удалить app.UseEndpoint() и зарегистрировать конечные точки непосредственно в веб-приложении (приложении). Однако это не работает, когда у меня есть код, обращающийся к службе IApiDescriptionGroupCollectionProvider. Бегapp.Services.GetService<IApiDescriptionGroupCollectionProvider>().ApiDescriptionGroups.Items.ToList();теперь ничего не возвращает, а также сломает Swagger, из-за чего он не найдет никаких операций. Но это будет нормально работать при переносе регистраций в UseEndpoints().

Работает:

      app.UseEndpoints(endpoints =>
{
   endpoints.MapGet("/hello", () => "Hello world!");
});
var apiDescriptions = app.Services.GetService<IApiDescriptionGroupCollectionProvider>().ApiDescriptionGroups.Items.ToList();

Не работает:

      app.MapGet("/hello", () => "Hello world!");
var apiDescriptions = app.Services.GetService<IApiDescriptionGroupCollectionProvider>().ApiDescriptionGroups.Items.ToList();

Итак, мои вопросы: какое «волшебство» делает UseEndpoints, чтобы заставить это работать? Могу ли я использовать IApiDescriptionGroupCollectionProvider без использования UseEndpoints?

1 ответ

Я обнаружил, что он работает правильно, если это происходит после запуска WebApplication.

      using var _ = app.Lifetime.ApplicationStarted.UnsafeRegister(_ =>
{
    var api = app.Services.GetRequiredService<Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider>();
}, null);

app.Run();
Другие вопросы по тегам