ASP.NET Фильтр Core — IStartupConfigureServicesФильтр не работает

#c# #asp.net #asp.net-core

#c# #asp.net #asp.сетевое ядро

Вопрос:

В моем проекте есть основная библиотека с IWebHostBuilder расширением, которое регистрирует несколько сервисов для всех моих ASP.NET Основные приложения, которые его используют:

 public static IWebHostBuilder ChaseDefaultslt;TStartupgt;(this IWebHostBuilder builder) where TStartup : class  {  builder = builder  .ConfigureServices((ctx, services) =gt; services.AddSingletonlt;IStartupFiltergt;(new MyStartupFilter(ctx, services)))  .UseStartuplt;TStartupgt;()  .UseSetting(WebHostDefaults.ApplicationKey, ApplicationEnvironment.Name);   return builder;  }  

Я использую IStartupFilter интерфейс для регистрации фильтра запуска, чтобы вызвать несколько промежуточных программ до Startup.Configure вызова метода хоста, который отлично работает:

 public class MyStartupFilter : IStartupFilter {  private readonly WebHostBuilderContext _context;   public MyStartupFilter(WebHostBuilderContext context, IServiceCollection services)  {  _context = context;  }   public Actionlt;IApplicationBuildergt; Configure(Actionlt;IApplicationBuildergt; next)  {  return (app) =gt;  {  // Some middlewares   next(app);  };  } }  

Однако я также хочу добиться такого же поведения для ConfigureServices . Чтобы добиться этого, я вызвал пользовательский ConfigureServices метод в своем конструкторе фильтра запуска. Однако мне кажется неправильным делать это таким образом.

Я узнал о IStartupConfigureServicesFilter том, что нужно зарегистрировать несколько служб до Startup.ConfigureServices того, как будет вызван метод хоста. Я знаю, что этот интерфейс устарел, однако я все еще хочу использовать его для достижения своей цели, так как не могу придумать другого решения.

Когда я что-то проверял, мне казалось, что ASP.NET Ядро игнорирует этот фильтр, и при поиске по ASP.NET Основной исходный код на GitHub, похоже, для него вообще нет ссылок.

Есть идеи, как добиться того, чего я хочу, без использования этого устаревшего фильтра?

Комментарии:

1. Какую версию вы используете?

2. @Chaodeng .NET 5