繁体   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