#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