. Net core web api конфигурируют сервисы перед вызовом Startup - PullRequest
0 голосов
/ 25 марта 2020

Я создаю. net core 3.1 web api application. По умолчанию он настроен на использование IHostBuilder с файлом Startup, который выполняет некоторые настройки

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Я хочу добавить некоторые конфигурации в мой файл Startup (создание событий), и проблема в том, что они не будут выполняться при запуске приложения, но только когда API получит первый запрос. Это означает, что мое размещенное приложение не сможет обрабатывать события, пока не получит запрос. Итак, вопрос: как я могу вызвать методы конфигурации из файла Startup при запуске приложения или как я могу указать c конфигурацию, которая будет выполняться при запуске приложения?

1 Ответ

1 голос
/ 26 марта 2020

Используйте Program.Main точку входа.

Измените этот автоматически сгенерированный код:

public static void Main(string[] args)
{
  CreateHostBuilder(args).Build().Run();
}

Кому:

public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();

    // Use DI via host.Services:
    var myConfiguredService = host.Services.GetRequiredService<SomeService>();
    myConfiguredService.DoSomething();

    host.Run();
}

Это был предпочтительный способ в инициализированную БД с данными в EF 2.0 и все еще отлично работает для других целей.

Этот (Main) метод выполняется, когда выполняется dotnet run, прежде чем он получит какие-либо запросы.

Но если вы размещаете веб-приложение за IIS , имейте в виду, что IIS фактически не запустит ваше приложение, пока не получит первый запрос! Таким образом, вы не можете решить эту проблему «внутри» своего приложения, и я не знаю, есть ли в новых / последних версиях IIS какие-либо настройки по этому поводу.

Вместо этого вы можете использовать любую службу мониторинга работоспособности и установить ее. проверять ваше веб-приложение каждые 1-3-5 минут, чтобы ваше веб-приложение получало некоторый «поддельный» запрос и раскручивалось до того, как поступит фактический «деловой» запрос.

PS Если вам нужна асинхронность / ожидание - измените void Main на async Task Main и host.Run() на await host.RunAsync() (обсуждается здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...