簡體   English   中英

.Net core web api 在調用 Startup 之前配置服務

[英].Net core web api configure services before Startup is called

我正在創建 .net core 3.1 web api 應用程序。 默認情況下,它被配置為使用帶有Startup文件的IHostBuilder進行一些配置

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

我想在我的Startup文件中添加一些配置(事件生成),問題是它們不會在應用程序啟動時執行,而只會在 api 收到第一個請求時執行。 這意味着我的托管應用程序在收到請求之前將無法處理事件。 所以問題是:如何在應用程序啟動時從Startup文件調用配置方法,或者如何進行將在應用程序啟動時執行的特定配置?

使用您的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 中使用數據初始化 DB 的首選方法,並且仍然適用於其他目的。

這個 ( Main ) 方法在dotnet run被執行時dotnet run ,在它收到任何請求之前。

但是,如果您在 IIS 后面托管 webapp,請注意 IIS 在收到第一個請求之前不會實際啟動您的應用程序! 所以,你不能在你的應用程序“內部”解決這個問題,我不知道新的/最新的 IIS 是否有任何關於這個的設置。

相反,您可以使用任何正常運行時間監控服務並將其設置為每 1-3-5 分鍾檢查一次您的網絡應用程序,因此您的網絡應用程序將收到一些“虛假”請求並在實際“業務”請求到達之前啟動。

PS 如果您需要 async/await - 將void Main更改為async Task Main並將host.Run()更改為await host.RunAsync() (在此處討論)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM