我们一般使用以下方式创建主机Host.CreateDefaultBuilder()
方法。
这Host.CreateDefaultBuilder
返回一个IHostBuilder
.
The IHostBuilder
有一些扩展方法,我们可以通过它们配置构建器。配置完成后IHostBuilder
我们建造IHost
by IHostBuilder.Build()
.
但在.NET Platform Extension 7上,引入了一种新方法Host.CreateApplicationBuilder()
。
它给了我们一个HostApplicationBuilder
实例。
它没有像这样的扩展方法IHostBuilder
配置,但它有一些属性,如配置、环境、日志记录、服务等。
并使用HostApplicationBuilder.Build()
我们最终可以构建IHost
.
我的问题是我们何时以及为什么应该使用HostApplicationBuilder
代替IHostBuilder
?
以及如何配置服务、配置等HostApplicationBuilder
,我们是否需要直接使用它的属性(配置、环境、日志记录、服务等)?
我尝试在谷歌上搜索但没有得到答案。
它有一点记录here https://github.com/dotnet/runtime/discussions/81090 and here https://github.com/dotnet/runtime/issues/61634.
总体想法是放弃回调并转向线性代码来配置所有内容
链接中的代码示例...
Web
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();
Non-Web
var builder = Host.CreateApplicationBuilder();
builder.Logging.AddConsole();
builder.Services.AddOptions<MyOptions>().BindConfiguration("MyConfig");
builder.Services.AddHostedService<MyWorker>();
var host = builder.Build();
host.Run();
更新2023-11-23
总之,旧的 Host.CreateDefaultBuilder 方法正在被淘汰,新方法采用“远离回调并转向线性代码”的方法。
这意味着应该使用 HostApplicationBuilder 上的属性,但第三方库需要更新,以便它们的扩展方法能够满足它。例如 Serilog 有一个讨论 https://github.com/serilog/serilog/issues/1855关于这一点。
使用 Host.CreateApplicationBuilder 的示例代码:
var applicationBuilder = Host.CreateApplicationBuilder();
applicationBuilder.Logging.AddConsole();
applicationBuilder.Configuration.AddJsonFile("appsettings.json");
applicationBuilder.Environment.ApplicationName = "My Application";
applicationBuilder.Services.AddSingleton<MyService>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)