一、主机模型概述
引用https://blog.csdn.net/mss359681091/article/details/1474947001. 主机模型概述
引用https://blog.csdn.net/mss359681091/article/details/147494700
1.1 主机的作用
主机在 ASP.NET Core 中负责:
- 应用程序的启动和生命周期管理
- 依赖注入容器的配置
- 应用程序配置的设置
- 日志系统的初始化
- 中间件管道的构建(针对Web应用)
1.2 三种主机的演进
WebHost(1.0-3.x):最初的Web应用主机Host(3.0+):通用主机,用于非HTTP场景WebApplication(6.0+):现代化Web应用主机
1.3 如何选择主机模型
| 场景 | 推荐主机 |
|---|---|
| 新Web项目 (6.0+) | WebApplication |
| 旧Web项目 (3.0-5.0) | WebHost (考虑迁移) |
| 后台服务/Worker | Host |
2. 主要应用
执行顺序
// 输出顺序: // 环境: Production // 应用: MyApp // 1. StartAsync - 服务开始启动 // 2. [主机完全启动] // 3. ApplicationStarted - 应用已完全启动 // [应用运行中... 按 Ctrl+C] // 4. ApplicationStopping - 正在关闭应用 // 5. StopAsync - 服务停止中 // 6. ApplicationStopped - 应用已关闭
2.1 设置主机
主机通常由 Program 类中的代码配置、生成和运行。 Main 方法:
- IHostApplicationBuilder调用 CreateApplicationBuilder 方法以创建和配置生成器对象。
- 调用 Build() 以创建 IHost 实例。
- 对主机对象调用 Run 或 RunAsync 方法。
using Example.WorkerService;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();
IHost host = builder.Build();
host.Run();
IHostApplicationBuilder:主机级配置中心
- 定位:应用程序主机的「总设计师」,负责初始化环境、加载配置、注册服务
2.1.1. 应用构建器默认配置
| Name | Description |
|---|---|
| CreateApplicationBuilder() |
Initializes a new instance of the HostApplicationBuilder class with pre-configured defaults. |
| CreateApplicationBuilder(HostApplicationBuilderSettings) |
Initializes a new instance of the HostApplicationBuilder class with preconfigured defaults. |
| CreateApplicationBuilder(String[]) |
Initializes a new instance of the HostApplicationBuilder class with pre-configured defaults. |
默认配置:
- 将内容根路径设置为由 GetCurrentDirectory() 返回的路径。
- 从以下位置加载主机配置:
- 前缀为
DOTNET_的环境变量。 - 命令行参数。
- 前缀为
- 从以下位置加载应用程序配置:
- appsettings.json。
- appsettings.{Environment}.json。
- 密钥管理器 当应用在
Development环境中运行时。 - 环境变量。
- 命令行参数。
- 配置 ILoggerFactory 添加以下日志记录提供程序:
- 控制台
- 调试
- 事件源
- EventLog(仅当在 Windows 上运行时)
- 当环境为Development时,启用范围验证和依赖验证。
2.1.2 应用构建器自定义配置项
CreateApplicationBuilder(HostApplicationBuilderSettings)
HostApplicationBuilderSettings包含的内容包括:
| 属性 | 类型 | 作用 | 默认值 |
|---|---|---|---|
| ApplicationName | string |
设置应用程序名称,影响 IHostEnvironment.ApplicationName |
自动检测(通常为入口程序集名) |
| Args | string[] |
添加命令行参数到配置系统 | null |
| Configuration | ConfigurationManager |
提供初始配置源,可影响主机行为 | null |
| ContentRootPath | string |
设置内容根目录路径 | Directory.GetCurrentDirectory() |
| DisableDefaults | bool |
是否禁用预配置的默认设置 | false |
| EnvironmentName | string |
设置环境名称(Development/Staging/Production) | ASPNETCORE_ENVIRONMENT 或 DOTNET_ENVIRONMENT 环境变量 |
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
var settings = new HostApplicationBuilderSettings
{
Args = args,
// 预先配置自定义配置源
Configuration = new ConfigurationManager()
};
// 添加 JSON 配置文件
settings.Configuration.AddJsonFile("customsettings.json", optional: true, reloadOnChange: true);
// 添加 XML 配置文件
settings.Configuration.AddXmlFile("appsettings.xml", optional: true);
// 添加自定义配置源
settings.Configuration.Add(new MyCustomConfigurationSource());
var builder = Host.CreateApplicationBuilder(settings);
// builder.Configuration 已经包含上述自定义配置
builder.Services.AddHostedService<MyService>();
using var host = builder.Build();
await host.RunAsync();
2.2 框架提供的服务
调用 IHostBuilder.Build() 或 HostApplicationBuilder.Build() 时,自动注册以下服务:
- IHostApplicationLifetime: 应用程序生命周期,允许在应用程序启动和关闭时执行自定义代码。
public interface IHostApplicationLifetime
{
CancellationToken ApplicationStarted { get; } // 应用程序已启动
CancellationToken ApplicationStopping { get; } // 应用程序正在停止
CancellationToken ApplicationStopped { get; } // 应用程序已停止
void StopApplication(); // 请求停止应用程序
}
- IHostLifetime:主机生命周期控制,控制主机何时启动和停止,监听系统信号并做出响应。
public interface IHostLifetime
{
Task WaitForStartAsync(CancellationToken cancellationToken);
Task StopAsync(CancellationToken cancellationToken);
}
- IHostEnvironment:提供应用程序运行环境的相关信息。
public interface IHostEnvironment
{
string ApplicationName { get; } // 应用程序名称
string EnvironmentName { get; } // 环境名称(Development/Staging/Production)
string ContentRootPath { get; } // 内容根目录路径
IFileProvider ContentRootFileProvider { get; } // 内容根目录的文件提供程序
}
如果要针对 Web 进行生成或者要编写分散式应用程序,可能需要使用不同的主机生成器。 请考虑使用以下列表中的其他主机生成器:
- DistributedApplicationBuilder:用于创建分散式应用的生成器。 有关详细信息,请参阅 Aspire。
- WebApplicationBuilder:用于 Web 应用程序和服务的生成器。 有关详细信息,请参阅 ASP.NET Core 。
- WebHostBuilder:用于
IWebHost的生成器。 有关详细信息,请参阅 ASP.NET Core Web 主机。
2.3 关闭

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)