.NET Core 的Generic Host 之Generic Host Builder

.NET Core 的Generic Host 之Generic Host Builder通用Host(GenericHost)与webHost不同的地方就是通用Host解耦了Http请求管道,使得通用Host拥有更广的应用场景。比如:消息收发、后台…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

通用Host(Generic Host) 与 web Host 不同的地方就是通用Host解耦了Http请求管道,使得通用Host拥有更广的应用场景。比如:消息收发、后台任务以及其他非http的工作负载。这些场景都可以通过使用通用Host拥有横切(Cross-cutting)的能力,比如:配置、依赖注入和日志记录。
***

Asp net core 2.1版本推出了Generic Host Builder,但它仅仅用在了非http工作负载的场景,Generic Host Builder会在2019年发布的3.0版本中替换掉Web Host Builder。

640?wx_fmt=png

asp net core 2.1没有使用Generic Host Builder,那么它的使用场景是什么呢?Generic Host Builder的在非http负载的使用场景有消息收发、后台任务等。
HostBuilder位于 Microsoft.Extensions.Hosting 命名空间下,实现了IHostBUilder接口。Net core 应用在Main()中最简单的用法如下:

public static async Task Main(string[] args)
{
var host = new HostBuilder()
.Build();

await host.RunAsync();
}

Build()方法是初始化host实例,它仅仅能被调用一次,在Build()方法执行前调用ConfigureServices()方法可以用来配置host。

var host = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{

});
})
.Build();

ConfigureServices((hostContext, services) 方法有一个HostBuilderContext参数和一个依赖注入的IServiceCollection参数。你也可以通过调用Configure()设置Host的其他设置,当前HostOptions对象只有一个Shutdown Timeout 属性。
你可以在官方示例看到更多的配置,下面是一个其中的代码片段:

Host 配置部分

.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
})

应用配置部分

.ConfigureAppConfiguration((hostContext, configApp) =>
{
configApp.AddJsonFile("appsettings.json", optional: true);
configApp.AddJsonFile(
$"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json",
optional: true);
configApp.AddEnvironmentVariables(prefix: "PREFIX_");
configApp.AddCommandLine(args);
})

依赖注入代码

.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<LifetimeEventsHostedService>();
services.AddHostedService<TimedHostedService>();
})

日志配置代码

.ConfigureLogging((hostContext, configLogging) =>
{
configLogging.AddConsole();
configLogging.AddDebug();
})

Asp net core 3.0 中使用Generic Host Builder 替换 Web Host Builder,net core 3.0 web 应用在Main函数中简单的使用方式代码如下:

public static void Main(string[] args)
{
CreateHostBuilder(args)
.Build()
.Run();
}

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

3.0版本中的CreateHostBuilder方法与2.x版本的 CreateWebHostBuilder() 方法很相似,二者最大的不同就是WebHost.CreateDefaultBuilder() 被替换成 Host.CreateDefaultBuilder(),
还有一个不同的地方就是 Host.CreateDefaultBuilder()方法,因为新版本的host builder是一个通用的host builder,这样就要通过嗲用 CreateDefaultBuilder()方法来构建一个web app host。

未来我们需要知道:

  • WebHostBuilder在未来将会被弃用

  • IWebHostBuilder接口将会被保留

  • 你不能在Startup类里面注入任何服务,IHostingEnvironment and IConfiguration除外

官方文档
Generic Host Builder in ASP .NET Core

640?wx_fmt=png

原文地址:https://www.cnblogs.com/blue-tian/p/10941235.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182627.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 查询电脑用户名命令_怎么改电脑管理员用户名

    查询电脑用户名命令_怎么改电脑管理员用户名2016-12-1809:07:531.首先我们点击电脑左下角的开始,然后点击“控制面板”2.在弹出的窗口里点击“添加或删除用户账户”3.点击“创建一个新账户”4.填上你要开的账号的名字5.勾选你要开的账号…2017-01-0414:07:08无线网络(wifi)名的更改方法:1.打开电脑的wifi,搜索路由器默认wifi名(路由器背面铭牌有写),连接wifi网络。2.打开电…

    2022年10月14日
    6
  • JAVA贪吃蛇代码(带注释)

    JAVA贪吃蛇代码(带注释)贪吃蛇图片是代码里面的素材游戏数据类packagecom.tang.retor_snaker;importjavax.swing.*;importjava.net.URL;publicclassData{privatestaticURLbodyURL=Data.class.getResource(“/com/tang/retor_snaker/statics/body.png”);privatestaticImageIconbo

    2022年5月25日
    61
  • Over Permission(越权)学习「建议收藏」

    Over Permission(越权)学习「建议收藏」OverPermission(越权)用户A的权限小于用户B的权限,此时用用户A的权限去操作用户B的数据,如果能够操作成功,就称之为越权操作。越权漏洞一般容易出现在权限页面(需要登录的页面)增、删、改、查的地方。越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。当用户对权限页面内的信息进行增、删、改、查的操作时,后台对当前用户的权限进行校验,看是否具备操作的权限,从而给出响应。如果校验规则过于简单,就容易出现越权漏洞。防止越权漏洞1、使用最小权限原则对用户进行赋权;2、使用

    2022年6月22日
    24
  • Unittest测试框架基本使用[通俗易懂]

    Unittest测试框架基本使用[通俗易懂]unittest单元测试

    2022年10月14日
    3
  • Java一个汉字占几个字节(详解与原理)(转载)「建议收藏」

    Java一个汉字占几个字节(详解与原理)(转载)「建议收藏」背景:今天学习Netty做定长消息发送时,发现到UTF-8编码下的中文并非两个字节,是三个字节,omg~,遂翻了篇博客后才发现原来java中文对应的字节长度还有这么多说道,涨姿势了,咳咳~原文如下:忒长了,原文作者大大辛苦了,各位看官捡感兴趣的瞅,java新手遇到编码问题可看后面关于编码问题的说明,应该会有所收获~(啰嗦完了。。。)1、先说重点:不同的编码格式占字节数是…

    2022年4月19日
    102
  • mysql 练习题

    mysql 练习题一、上机内容使用SQL语句创建数据库studentsdb。、Createdatabasestudentdb;2.使用SQL语句选择studentsdb为当前使用数据库。Usestudentdb;3.使用SQL语句在studentsdb数据库创建数据表student_info、curriculum、grade,三个表的数据结构如表1-表3所示。createtablestude…

    2022年9月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号