.NET 平台扩展 7 中的 Host.CreateDefaultBuilder 与 Host.CreateApplicationBuilder

S.N*_*kib 41 .net c# .net-core .net-7.0

我们一般使用Create HostHost.CreateDefaultBuilder() 方法。返回Host.CreateDefaultBuilder一个IHostBuilder. 它IHostBuilder有一些扩展方法,我们可以通过它们配置构建器。配置完成后,IHostBuilder我们构建IHostby IHostBuilder.Build()

但在.NET Platform Extension 7上,引入了一种新方法Host.CreateApplicationBuilder()。它给我们举了一个HostApplicationBuilder例子。它没有像IHostBuilder配置这样的扩展方法,但它有一些属性,例如配置、环境、日志记录、服务等。使用HostApplicationBuilder.Build()我们最终可以构建IHost.

HostApplicationBuilder我的问题是我们何时以及为什么应该使用而不是构建主机IHostBuilder?以及如何在 上配置服务、配置等HostApplicationBuilder,我们是否需要直接使用它的属性(配置、环境、日志记录、服务等)?

我尝试在谷歌上搜索但没有得到答案。

Kri*_*isG 30

这里这里有一些记录。

总体想法是放弃回调并转向线性代码来配置所有内容

链接中的代码示例...

网络

var builder = WebApplication.CreateBuilder();

builder.Logging.AddConsole();

builder.Services.AddOptions<MyOptions>().BindConfiguration("MyConfig");

builder.Services.AddHostedService<MyWorker>();

var app = builder.Build();

app.MapGet("/", () => "Hello World");

app.Run();
Run Code Online (Sandbox Code Playgroud)

非网络

var builder = Host.CreateApplicationBuilder();

builder.Logging.AddConsole();

builder.Services.AddOptions<MyOptions>().BindConfiguration("MyConfig");

builder.Services.AddHostedService<MyWorker>();

var host = builder.Build();

host.Run();
Run Code Online (Sandbox Code Playgroud)

更新2023-11-23

总之,旧的 Host.CreateDefaultBuilder 方法正在被淘汰,新方法采用“远离回调并转向线性代码”的方法。

这意味着应该使用 HostApplicationBuilder 上的属性,但第三方库需要更新,以便它们的扩展方法能够满足它。例如 Serilog对此进行了讨论。

使用 Host.CreateApplicationBuilder 的示例代码:

var applicationBuilder = Host.CreateApplicationBuilder();

applicationBuilder.Logging.AddConsole();

applicationBuilder.Configuration.AddJsonFile("appsettings.json");

applicationBuilder.Environment.ApplicationName = "My Application";

applicationBuilder.Services.AddSingleton<MyService>();
Run Code Online (Sandbox Code Playgroud)

  • 我不明白答案。问题是关于 Host.CreateDefaultBuilder() 和 Host.CreateApplicationBuilder() 的,但答案是关于 WebApplication.CreateBuilder() 和 Host.CreateApplicationBuilder() 的。有人能回答实际问题吗?:D (2认同)