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

2023-12-28

我们一般使用以下方式创建主机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(使用前将#替换为@)

.NET 平台扩展 7 中的 Host.CreateDefaultBuilder 与 Host.CreateApplicationBuilder 的相关文章

随机推荐

  • 信号 fft 的幅度错误

    我正在尝试计算使用 Python 进行快速傅立叶变换 我正在使用函数 fft fft 并将其应用于简单的正弦信号 这是我的代码 import numpy as np import matplotlib pyplot as plt frame
  • 在分块矩阵中查找一个值

    我写了一个稀疏矩阵类 基于Block压缩存储 我写了几乎所有的方法 但我不知道如何写方法findValue i j 给出原始矩阵的 2 个索引 存储由四个向量组成 ba 按从上到下左右顺序存储矩阵的非零块 几乎有一个元素不为零的矩形块 an
  • 如何让 mod_rewrite 只匹配一次规则

    我有以下网址 http localhost http mygarble com foundationsofwebprogramming 86 http localhost http mygarble com foundationsofweb
  • Excel公式最小值的位置

    编辑 可能是一个简单的问题 基本上我有三个值 比如说不同单元格中的 9 4 和 7 不在表中 我想找到订单中的最小值 然后返回其相对位置 例如 9 4 7 将返回 2 因为 4 是最小值并且位于第二位 正确的Excel公式是什么 谢谢 解决
  • 使用Scala对象作为key的reduceByKey

    我正在将 Spark 与 scala 一起使用 并且我有一个充满 tuple2 的 RDD 其中包含一个复杂对象作为键和一个 double 目的是如果对象相同 则加倍 频率 为此 我将我的对象定义如下 case class SimpleCo
  • R 中的分组依据和条件

    我有一个具有相似名称 课程 课程和完成情况的数据框 name lt c John John John Sam Sam course lt c Driving Driving Driving Cycling Cycling lesson lt
  • 指定的子项已经有父项。您必须首先对孩子的父母调用removeView()

    我正在做一个关于输入你的名字的应用程序的小练习 它返回 你好 你输入的名字 但是在我按下按钮后 我收到错误 指定的子项已经有父项 您必须首先在子项的父项上调用removeView MainActivity java package com
  • Spring Boot 中未调用 ClientHttpRequestInterceptor

    我正在尝试使用 ClientHttpRequestInterceptor 将日志记录添加到我的应用程序 我的拦截器没有被调用 不知道这里出了什么问题 这是我的代码 Component Slf4j public final class Res
  • SQL 模式匹配

    我有一个与 SQL 相关的问题 我想匹配两个字段的相似性并返回相似程度的百分比 例如 如果我有一个名为 doc 的字段 其中包含以下内容 This is my first assignment in SQL 在另一个领域我有类似的东西 My
  • Hibernate:复杂对象的初始化

    我在合理的时间内从数据库完全加载非常复杂的对象并使用合理的查询数量时遇到问题 我的对象有很多嵌入实体 每个实体都引用另一个实体 另一个实体引用另一个实体 依此类推 因此 嵌套级别为 6 因此 我创建了示例来演示我想要的内容 https gi
  • 无法使用 Node.js 处理 PHP 文件

    我有一个在 Heroku 服务器上运行的 Node js Web 应用程序 我的 javascript 中有一个 AJAX 请求 它将 GET 请求发送到服务器上的 PHP 文件 该请求工作正常 事实上 如果我在没有任何 Node js 而
  • Lumen (Laravel) Eloquent php artisan make:模型未定义

    我将 Lumen 1 0 用于 API 项目 我已经通过取消注释以下行来启用 Eloquent引导程序 app php file app gt withEloquent 但是当我想通过迁移创建第一个模型时 它失败了 php artisan
  • 在 SQLite android 中存储图像

    我有一个 SQLite 数据库 我使用此代码将图像存储为 BLOB URL url new URL http t0 gstatic com images q tbn ANd9GcRsaLl3TGB4W2hJFN Wh0DNVPQEYGtwe
  • GNU 排序命令的行为(使用非字母 ASCII 字符,例如点或分号)

    我想要sort命令平等对待所有字符 例如 当我这样做时 echo e TEST b nTESTa nTESTc sort TESTa TEST b TESTc 该点被忽略 我想得到TEST b在最后或第一个位置 但是 我在手册页中找不到正确
  • UNIX:同一路径上的两个同名目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我浏览 UNIX 系统时 当我执行以下操作时 我发现同一个路径上列出了五个具有相同名称的目录ls Dl 这是观点 为什么我说五个 两个同
  • 获取可用的 clojure 命名空间

    有没有一种惯用的方法来获取可以使用的可用名称空间 all ns 仅返回已使用的名称空间 Package getPackages 返回所有可用的 Java 包import 但仅限那些已使用的 Clojure 命名空间 然后我偶然发现这个帖子
  • 使用 ACL 调用 upload_file 时,Ruby S3“访问被拒绝”错误

    我正在尝试编写一个 Ruby 脚本 将文件上传到 AWS 并使该文件公开可用 我做了以下事情 s3 Aws S3 Resource new credentials Aws Credentials new KEY SECRET region
  • 当主键为 varchar 时,无法从 Laravel 的 Eloquent 检索列值

    我遇到了一个问题 我的 Laravel 的 Eloquent 模型没有给我名为 id 的列的值 它只是变成整数 0 而不是字符串 我虽然该列受到某种保护 但在 id 是整数的其他模型中 它返回的值很好 问题 我不能使用 VARCHAR 作为
  • 使用 jQuery 的 $().on('mouseenter',function(){}) 比 $().mouseenter(function(){}) 有优势吗?

    我经常看到这样的代码 thing on mouseenter function Do stuff 就我个人而言 我几乎总是这样写 thing mouseenter function Do stuff 同样 我也经常写 thing click
  • .NET 平台扩展 7 中的 Host.CreateDefaultBuilder 与 Host.CreateApplicationBuilder

    我们一般使用以下方式创建主机Host CreateDefaultBuilder 方法 这Host CreateDefaultBuilder返回一个IHostBuilder The IHostBuilder有一些扩展方法 我们可以通过它们配置