.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 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 将所有依赖项从 .Net Standard 库复制到 .Net Framework 控制台应用程序

    在 net Framework 4 6 控制台应用程序中使用 net 标准项目后 net 标准项目的依赖项不会复制到输出目录中 这会导致缺少 dll 的运行时错误 对于引用的项目 复制本地 属性已经成立 一种可能的解决方案是在控制台应用程序
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile

随机推荐

  • 信号 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有一些扩展方法 我们可以通过它们配置