.Net Core中Host的作用和用法

2023-09-20 21:30:00

Host简介
        在ASP.NET Core中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。
        Host是通过使用IHostBuilder接口和Host.CreateDefaultBuilder方法来创建的。IHostBuilder接口允许我们配置和构建Host,而Host.CreateDefaultBuilder方法提供了一组默认的配置选项,使得创建Host变得更加简单。
Host的作用

        生命周期管理:Host负责管理应用程序的生命周期。它在应用程序启动时执行一些初始化任务,例如读取配置文件、注册依赖项等。在应用程序关闭时,Host会执行一些清理任务,例如释放资源、保存状态等。通过Host,我们可以确保应用程序在启动和关闭时都能够执行必要的操作。

        配置管理:Host提供了一种统一的方式来管理应用程序的配置。它可以从多个配置源(如命令行参数、环境变量、配置文件等)中读取配置信息,并将其应用于应用程序。这使得我们可以根据不同的环境(如开发、测试、生产)使用不同的配置,而无需修改应用程序的代码。

        依赖项注入:Host还负责管理应用程序的依赖项。它可以配置和注册依赖项容器,使得应用程序的各个组件可以方便地获取它们所需的依赖项。通过依赖项注入,我们可以实现松耦合的组件设计,提高代码的可测试性和可维护性。

Host的用法
使用Host非常简单。下面是一个基本的示例:

codeduidaima.com

  1. using Microsoft.Extensions.Hosting;
  2. using System;
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. var host = Host.CreateDefaultBuilder(args)
  8. .ConfigureServices((hostContext, services) =>
  9. {
  10. // 堆代码 duidaima.com
  11. // 配置和注册依赖项
  12. services.AddMyServices();
  13. })
  14. .Build();
  15. // 执行应用程序
  16. host.Run();
  17. }
  18. }

        在上面的示例中,我们使用Host.CreateDefaultBuilder方法创建了一个Host,并通过ConfigureServices方法配置和注册了一些依赖项。最后,我们通过调用Build方法来构建Host,并通过调用Run方法来执行应用程序。

        除了上面的基本用法之外,Host还提供了许多其他的配置选项和扩展点,以满足不同的需求。我们可以通过调用ConfigureHostConfiguration方法来配置Host的配置,通过调用ConfigureAppConfiguration方法来配置应用程序的配置,通过调用ConfigureServices方法来配置依赖项,以及通过调用ConfigureLogging方法来配置日志记录等。

Host的常见用例

        Web应用程序:在ASP.NET Core中,使用Host来托管Web应用程序是非常常见的用例。我们可以通过配置Host来启动Kestrel服务器,并将Web应用程序作为一个托管服务运行起来。Host还可以处理一些与Web应用程序相关的任务,例如HTTPS配置、请求管道配置等。

        后台任务:Host也可以用于托管后台任务。我们可以通过Host来启动和管理后台任务的生命周期,并配置一些后台任务的特定选项,例如任务调度、并发限制等。Host还可以处理一些与后台任务相关的任务,例如日志记录、异常处理等。

        控制台应用程序:使用Host来托管控制台应用程序是另一个常见的用例。Host可以帮助我们管理控制台应用程序的生命周期,并提供一些控制台应用程序特定的选项,例如命令行参数解析、控制台输出等。

Generic Host和Web Host
Web Host(Web 主机)

        Web Host是ASP.NET Core 2.x版本及之前的主机模型。它主要用于托管Web应用程序,提供了一些特定于Web开发的功能。Web Host继承自Generic Host,并添加了一些与Web开发相关的默认配置和中间件。

Web Host提供以下功能:
        配置HTTP请求处理管道:Web Host通过中间件来处理HTTP请求,并提供了一些默认的中间件,如路由、静态文件服务、MVC等。
        集成IIS:Web Host可以与IIS(Internet Information Services)集成,以便通过IIS托管应用程序。

        集成Kestrel:Web Host使用Kestrel作为默认的Web服务器,用于处理HTTP请求。

Generic Host(通用主机)

        Generic Host是从ASP.NET Core 3.0版本引入的新主机模型。它是一个通用的、可扩展的主机,可以用于托管各种类型的应用程序,不仅限于Web应用程序。Generic Host提供了更多的灵活性和可扩展性,使开发者能够构建更加通用的应用程序。

        Generic Host提供以下功能:
配置应用程序服务:Generic Host允许开发者配置应用程序所需的各种服务,如数据库连接、日志记录、身份验证等。
支持不同类型的应用程序:除了Web应用程序,Generic Host还可以用于托管后台服务、控制台应用程序等各种类型的应用程序。

        集成ASP.NET Core应用程序:Generic Host可以用于托管ASP.NET Core应用程序,但不提供与Web开发相关的默认配置和中间件。

区别
        1.Web Host是从Generic Host派生而来,专注于Web应用程序的托管,提供了与Web开发相关的默认配置和中间件。
        2.Generic Host是一个通用的主机模型,适用于各种类型的应用程序,提供了更多的灵活性和可扩展性。
        3.在ASP.NET Core 3.0及之后的版本中,建议使用Generic Host来构建新的应用程序,因为它提供了更多的功能和扩展性。
        4.Web Host适用于传统的Web应用程序开发,提供了与Web开发相关的默认配置和中间件。Generic Host是一个通用的主机模型,适用于各种类型的应用程序,并提供了更多的灵活性和可扩展性。根据应用程序的需求,选择适合的主机模型来构建和托管应用程序。

WebApplication
        从asp.net coe6开始,默认的asp.net core模板已经改成使用WebApplication来创建Web应用程序。WebApplication提供了一种简化的方式来配置和运行 Web 应用程序,而不需要 Startup 类。

  1. var builder = WebApplication.CreateBuilder(args);
  2. // Add services to the container.
  3. builder.Services.AddControllers();
  4. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  5. builder.Services.AddEndpointsApiExplorer();
  6. builder.Services.AddSwaggerGen();
  7. var app = builder.Build();
  8. // 堆代码 duidaima.com
  9. // Configure the HTTP request pipeline.
  10. if (app.Environment.IsDevelopment())
  11. {
  12. app.UseSwagger();
  13. app.UseSwaggerUI();
  14. }
  15. app.UseAuthorization();
  16. app.MapControllers();
  17. app.Run();

        在上面的示例中,我们使用WebApplication.CreateBuilder方法创建了一个WebApplicationBuilder实例。然后,通过builder.Services配置我们依赖注入。最后,我们通过调用Build方法来构建WebApplication实例,并通过调用Run方法来运行应用程序。

        WebApplication提供了许多其他的方法和扩展点,用于处理不同类型的请求、配置中间件、设置路由规则等。通过使用这些方法和扩展点,我们可以构建出复杂和强大的Web应用程序。

        除了处理HTTP请求和生成HTTP响应之外,WebApplication还提供了一些其他的功能,例如依赖项注入、配置管理、日志记录等。我们可以通过调用Services属性来访问依赖项注入容器,通过调用Configuration属性来访问配置信息,通过调用Logging属性来访问日志记录功能。
通过使用WebApplication,我们可以构建出强大和灵活的Web应用程序。

总结
        ASP.NET Core中的Host是一个重要的概念,它提供了一种可靠和灵活的方式来启动、配置和管理应用程序。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。通过Host,我们可以实现各种不同类型的应用程序,例如Web应用程序、后台任务和控制台应用程序。希望本文对你理解和使用ASP.NET Core中的Host有所帮助。

更多推荐

Spring Boot启动源码分析

一,前言版本:spring-boot-starter-parent版本为2.3.0SpringBoot项目的启动入口是一个main方法,因此我们从该方法入手即可二,源码分析跟踪run方法/***SpringApplication的方法*@paramprimarySource启动类的class*@paramargs启动参

GPT,GPT-2,GPT-3,InstructGPT的进化之路

ChatGPT火遍圈内外,突然之间,好多人开始想要了解NLP这个领域,想知道ChatGPT到底是个什么?作为在这个行业奋斗5年的从业者,真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章,总结下GPT这条技术路线的初心。其实,ChatGPT的成功并非一朝一夕,而是OpenAI长达4年多持续努

基于Uniapp+SpringBoot+Vue的电影交流平台小程序设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

GaussDB数据库SQL系列-自定义函数

目录一、前言二、自定义函数(Function)概述三、使用场景四、优缺点1、数据库中Function的使用优点2、数据库中Function的使用缺点五、GaussDB中的Function示例与解析1、示例一:定义函数为SQL查询2、示例二:返回一个包含多个输出参数的记录3、示例三:返回RECORD类型结果集六、小结一、

【数据结构】平衡二叉搜索树(AVL树)——AVL树的概念和介绍、AVL树的简单实现、AVL树的增删查改

文章目录平衡二叉搜索树(AVL树)1.AVL树的概念和介绍2.AVL树的简单实现2.1AVL树的插入2.2AVL树的旋转2.2.1左旋2.2.2右旋2.2.3右左双旋2.2.4左右双旋全部源码平衡二叉搜索树(AVL树)为什么要引入平衡二叉搜索树?在之前我们学习了二叉搜索树,二叉搜索树的结构类似于一个倒置的树,而左子树的

GaussDB数据库SQL系列-子查询

目录一、前言二、GaussDBSQL子查询表达式1、EXISTS/NOTEXISTS2、IN/NOTIN3、ANY/SOME4、ALL三、GaussDBSQL子查询实验示例1、创建实验表2、EXISTS/NOTEXISTS示例3、IN/NOTIN示例4、ANY/SOME示例5、ALL示例四、注意事项及建议五、小结一、前

新装机电脑网速特别慢

老主机最近有些问题,我一直没能解决,也用了5年了,索性出给闲鱼二道贩子,又自己新配置了一台主机。具体表现为:主机插网线后,跟之前主机比,浏览网页或者下载资源速度特别慢,打开百度浏览器都要转上一会,不管下载什么资源,下载速度最快只有100-200kb,让我梦回05年,重新体验了一把当年的感觉,实在抓狂。主板带有WIFI功

3D WEB引擎HOOPS Commuicator助力Naval Architect Jumpstart快速启动船舶信息建模平台开发

行业:造船业挑战:新公司希望将创新的船舶信息建模产品推向市场-基于浏览器的产品需要支持高级可视化和强大的数据转换,以处理大型、复杂的造船项目-小型开发团队的任务是雄心勃勃的平台发布计划。解决方案:TechSoft3D提供领先的SDK,可加速强大的工程Web应用程序的开发。结果:利用第三方组件进行3DWeb轻量化、数据转

负载均衡中间件---Nginx

一.nginx的好处学习Nginx对于一个全栈开发者来说是非常有价值的,下面是一些学习Nginx的原因和好处:反向代理和负载均衡:Nginx是一个高性能的反向代理服务器,可以用于将客户端请求转发给多个后端服务器,实现负载均衡。学习Nginx可以让您了解如何配置和管理反向代理和负载均衡,以提高应用程序的性能和可靠性。静态

layui框架学习(45: 工具集模块)

layui的工具集模块util支持固定条、倒计时等组件,同时提供辅助函数处理时间数据、字符转义、批量事件处理等操作。util模块中的fixbar函数支持设置固定条(2.7版本的帮助文档中叫固定块),是指固定在页面一侧的工具条元素,不随页面滚动条滚动,默认在页面右下角位置。fixbar函数的原型为util.fixbar(

Docker vs. Podman: 选择容器技术的智慧之选

嗨,各位亲爱的程序员小伙伴们!当我们步入容器技术的世界,往往会在众多选择中迷茫。两个备受瞩目的容器工具,Docker和Podman,都在业界掀起了一股风潮。今天,我将带你深入探索,为什么在Docker和Podman之间做出选择,以及如何根据自身需求来做出明智的决策。就让我们一同踏上这个容器之旅吧!容器技术简介:为何容器

热文推荐