.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();