为什么我要 运行 ConfigureWebHostDefaults 之后的 ConfigureServices 而不是使用启动的 ConfigureServices

Why should I run ConfigureServices after ConfigureWebHostDefaults instead of using the ConfigureServices of the startup

我正在阅读 msdn 的文档。我想知道为什么在 ConfigureSerivices 或启动 ConfigureServices 方法中注册 IHostedService 之间有什么区别。

我一直在寻找差异,但似乎找不到。有人知道吗?

Program.cs

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

Startup.cs

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<VideosWatcher>();
}

在第二个示例中,托管服务在 Web 主机之前 运行。如果它需要容器中尚不可用的东西,就会出现错误。 尽管如此,这是大多数情况下的通用方法。

在第一个示例中,托管服务 运行 在 Web 主机启动后(在 kestrel 启动后),因此一切都可用。

文档对其进行了解释 here