Host简介

在ASP.NET Core中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。

Host是通过使用IHostBuilder接口和Host.CreateDefaultBuilder方法来创建的。IHostBuilder接口允许我们配置和构建Host,而Host.CreateDefaultBuilder方法提供了一组默认的配置选项,使得创建Host变得更加简单。

Host的作用

  1. 生命周期管理:Host负责管理应用程序的生命周期。它在应用程序启动时执行一些初始化任务,例如读取配置文件、注册依赖项等。在应用程序关闭时,Host会执行一些清理任务,例如释放资源、保存状态等。通过Host,我们可以确保应用程序在启动和关闭时都能够执行必要的操作。
  2. 配置管理:Host提供了一种统一的方式来管理应用程序的配置。它可以从多个配置源(如命令行参数、环境变量、配置文件等)中读取配置信息,并将其应用于应用程序。这使得我们可以根据不同的环境(如开发、测试、生产)使用不同的配置,而无需修改应用程序的代码。
  3. 依赖项注入:Host还负责管理应用程序的依赖项。它可以配置和注册依赖项容器,使得应用程序的各个组件可以方便地获取它们所需的依赖项。通过依赖项注入,我们可以实现松耦合的组件设计,提高代码的可测试性和可维护性。

Host的用法

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

using Microsoft.Extensions.Hosting;
using System; class Program
{
static void Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// 配置和注册依赖项
services.AddMyServices();
})
.Build(); // 执行应用程序
host.Run();
}
}

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

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

Host的常见用例

  1. Web应用程序:在ASP.NET Core中,使用Host来托管Web应用程序是非常常见的用例。我们可以通过配置Host来启动Kestrel服务器,并将Web应用程序作为一个托管服务运行起来。Host还可以处理一些与Web应用程序相关的任务,例如HTTPS配置、请求管道配置等。
  2. 后台任务:Host也可以用于托管后台任务。我们可以通过Host来启动和管理后台任务的生命周期,并配置一些后台任务的特定选项,例如任务调度、并发限制等。Host还可以处理一些与后台任务相关的任务,例如日志记录、异常处理等。
  3. 控制台应用程序:使用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开发相关的默认配置和中间件。

区别

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

WebApplication

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

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
} app.UseAuthorization(); app.MapControllers(); app.Run();

在上面的示例中,我们使用WebApplication.CreateBuilder方法创建了一个WebApplication实例。
然后,通过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有所帮助。

欢迎进群催更。

asp.net core之Host的更多相关文章

  1. 理解ASP.NET Core - [04] Host

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 本文会涉及部分 Host 相关的源码,并会附上 github 源码地址,不过为了降低篇幅,我会 ...

  2. 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践

    写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 ​ 可能很多新手都会遇到同样的问题:我要我的Asp.net ...

  3. [转]ASP.NET Core 1 Deploy to IIS

    本文转自: http://webmodelling.com/webbits/aspnet/aspnet-deploy-iis.aspx 15 Sep 2016. This tutorial will ...

  4. ASP.NET Core 1.0: Deploy to IIS

    尽管ASP.NET最新的官方文档记录了如何Deploy to IIS,但是实际操作起来依旧磕磕绊绊.官方文档地址:https://docs.asp.net/en/latest/publishing/i ...

  5. 《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项

    1.配置文件的相关闲话 Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级 命令行>环境变量 ...

  6. ASP.NET CORE 基础知识(一):概述【下】

    此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 配置 ASP.NET Core提供了一个配置框架,其能够从 ...

  7. Asp.net Core 2.1新功能Generic Host(通用主机),了解一下

    什么是Generic Host ? 这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host. Web Host –适用于托管W ...

  8. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 02. Web Host 的默认配置

    视频地址: https://www.bilibili.com/video/av38392956/?p=2 语雀 https://www.yuque.com/yuejiangliu/dotnet/ixt ...

  9. 探索ASP.NET Core 3.0系列一:新的项目文件、Program.cs和generic host

    前言:在这篇文章中我们来看看ASP.Net Core 3.0应用程序中一些基本的部分—— .csproj项目文件和Program.cs文件.我将会介绍它们从 ASP.NET Core 2.x 中的默认 ...

  10. 探索 ASP.Net Core 3.0系列五:引入IHostLifetime并弄清Generic Host启动交互

    前言:在本文中,我将介绍如何在通用主机之上重新构建ASP.NET Core 3.0,以及由此带来的一些好处. 同时也展示了3.0中引入新的抽象类IHostLifetime,并描述了它在管理应用程序(尤 ...

随机推荐

  1. Swift Codable协议实战:快速、简单、高效地完成JSON和Model转换!

    前言 Codable 是 Swift 4.0 引入的一种协议,它是一个组合协议,由 Decodable 和 Encodable 两个协议组成.它的作用是将模型对象转换为 JSON 或者是其它的数据格式 ...

  2. C# 反射 操作列表类型属性

    本文介绍对列表进行创建及赋值的反射操作 我们现在有TestA.TestB类,TestA中有TestB类型列表的属性List,如下: 1 public class TestA 2 { 3 public ...

  3. [Pytorch框架] 2.1.1 PyTorch 基础 : 张量

    文章目录 PyTorch 基础 : 张量 张量(Tensor) 基本类型 Numpy转换 设备间转换 初始化 常用方法 PyTorch 基础 : 张量 在第一章中我们已经通过官方的入门教程对PyTor ...

  4. SPN在域环境的应用

    windows域为了集中资源,有效地对资源访问控制权限进行细粒度分配,提高网络资源统一分配的管理.域内的每种资源分配了不同的服务主体名称(SERVICE Pricipal Name,SPN) 相关概念 ...

  5. JavaWeb之day03js

    目录: 1.js的String对象(****) 2.js的Array对象 (****) 3.js的Date对象 (****) * 获取当前的月 0-11,想要得到准确的月 +1 * 获取星期时候,星期 ...

  6. 2020-12-28:java中,生产环境服务器变慢,如何诊断处理?

    福哥答案2020-12-28:答案1:使用 top 指令,服务器中 CPU 和 内存的使用情况,-H 可以按 CPU 使用率降序,-M 内存使用率降序.排除其他进程占用过高的硬件资源,对 Java 服 ...

  7. 2020-12-04:mysql 表中允许有多少个 TRIGGERS?

    福哥答案2020-12-04: 在 Mysql 表中允许有六个触发器,如下:BEFORE INSERTAFTER INSERTBEFORE UPDATEAFTER UPDATEBEFORE DELET ...

  8. 在DevExpress中使用BandedGridView表格实现多行表头的处理

    在之前较早随笔中介绍过实现多行表头的处理,通过手工创建字段以及映射数据源字段属性的方式实现,有些客户反映是否可以通过代码方式更方便的创建对应的处理操作,因此本篇随笔继续探讨这个多行表头的处理的操作,使 ...

  9. 7-9 《Fibonacci 数列》

    7-9 <Fibonacci 数列> 思路:吃过前面<序列求和>问题的亏 但还是要尝试一下循环大法 Fn=Fn-1+Fn-2 定义int型 aFn-1 , bFn-2 , cF ...

  10. PySide6(Qt for Python) QTableWidget表头边框线问题

    这个问题是在Windows10平台下特有问题. 网络上有很多Qt C++的解决方案.但是没有特定的PySide6的解决方案(以下是Qt C++的解决方案). https://blog.csdn.net ...