辅助角色服务模板会创建一个 .NET 通用主机 HostBuilder。 通用主机可用于其他类型的 .NET 应用程序,如控制台应用。
主机是封装应用资源和生存期功能的对象,例如:
当主机启动时,它将对在托管服务的服务容器集合中注册的 IHostedService 的每个实现调用 IHostedService.StartAsync。 在辅助角色服务应用中,包含 BackgroundService 实例的所有 IHostedService 实现都调用其 BackgroundService.ExecuteAsync 方法。
一个主机对象中包含所有应用的相互依赖资源的主要原因是生存期管理:控制应用启动和正常关闭。 这是通过 Microsoft.Extensions.Hosting NuGet 包实现的。
主机通常由 Program 类中的代码配置、生成和运行。 Main 方法:
.NET 辅助角色服务模板会生成以下代码来创建通用主机:
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
//装配主机
services.AddHostedService<Worker>();
})
.Build();
host.Run();
ConfigureServices 方法公开了向 Microsoft.Extensions.DependencyInjection.IServiceCollection 实例添加服务的功能。 以后,可以通过依赖关系注入获取这些服务。
自动注册以下服务:
将 IHostApplicationLifetime 服务注入任何类以处理启动后和正常关闭任务。 接口上的三个属性是用于注册应用启动和应用停止事件处理程序方法的取消令牌。 该接口还包括 StopApplication() 方法。
以下示例是注册 IHostApplicationLifetime 事件的 IHostedService 实现:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace AppLifetime.Example;
public sealed class ExampleHostedService : IHostedService
{
private readonly ILogger _logger;
public ExampleHostedService(
ILogger<ExampleHostedService> logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("1. StartAsync has been called.");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("4. StopAsync has been called.");
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("2. OnStarted has been called.");
}
private void OnStopping()
{
_logger.LogInformation("3. OnStopping has been called.");
}
private void OnStopped()
{
_logger.LogInformation("5. OnStopped has been called.");
}
}
可以修改辅助角色服务模板以添加 ExampleHostedService (会随着主机的启动而启动)实现:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using AppLifetime.Example;
using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
services.AddHostedService<ExampleHostedService>())
.Build();
await host.RunAsync();
IHostLifetime 实现控制主机何时启动和何时停止。 使用了已注册的最后一个实现。 Microsoft.Extensions.Hosting.Internal.ConsoleLifetime 是默认的 IHostLifetime 实现。 有关关闭的生存期机制的详细信息,请参阅主机关闭。
将 IHostEnvironment 服务注册到一个类,获取关于以下设置的信息:
主机配置用于配置 IHostEnvironment 实现的属性。
主机配置在 ConfigureAppConfiguration 方法的 HostBuilderContext.Configuration 中可用。
在调用 ConfigureAppConfiguration 后,HostBuilderContext.Configuration 被替换为应用配置。
若要添加主机配置,请对 IHostBuilder 调用 ConfigureHostConfiguration。 可多次调用 ConfigureHostConfiguration,并得到累计结果。 主机使用上一次在一个给定键上设置值的选项。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
})
.Build();
// Application code should start here.
await host.RunAsync();
通过对 IHostBuilder 调用 ConfigureAppConfiguration 创建应用配置。 可多次调用 ConfigureAppConfiguration,并得到累计结果。 应用使用上一次在一个给定键上设置值的选项。
可以在 HostBuilderContext.Configuration 中获取由 ConfigureAppConfiguration 创建的配置以用于后续操作,并将其作为 DI 的服务。 主机配置也会添加到应用配置。
有关详细信息,请参阅 .NET 中的配置。
创建 WebApplicationBuilder 和 WebApplication,这提供了一种简化的方式来配置和运行 Web 应用程序,而不需要 Startup 类。 有关 WebApplicationBuilder 和 WebApplication 的详细信息,请参阅WebApplicationBuilder。
主机定义
主机是封装应用资源的对象,例如:
当主机启动时,它将对在托管服务的服务容器集合中注册的 IHostedService 的每个实现调用 IHostedService.StartAsync。 在 web 应用中,其中一个 IHostedService 实现是启动 IHostedService的 web 服务。
将应用的所有相互依赖资源包括在一个对象中可控制应用启动和正常关闭。
主机通常由 Program.cs 中的代码配置、生成和运行。 以下代码会使用添加到 DI 容器中的 IHostedService 实现创建一个通用主机:
await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<SampleHostedService>();
})
.Build()
.RunAsync();
对于 HTTP 工作负载,则在 CreateDefaultBuilder 之后调用 ConfigureWebHostDefaults:
await Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build()
.RunAsync();
本文中后面的所有应用类型的设置和 web 应用的设置部分介绍如何替代默认生成器设置。
自动注册以下服务:
有关从框架提供的服务的详细信息,请参阅 ASP.NET Core 中的依赖关系注入。
IHostLifetime 实现控制主机何时启动和何时停止。 使用了已注册的最后一个实现。
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime 是默认的 IHostLifetime 实现。 ConsoleLifetime:
将 IHostEnvironment 服务注册到一个类,获取关于以下设置的信息:
Web 应用实现 IWebHostEnvironment 接口,该接口继承 IHostEnvironment 并添加 IWebHostEnvironment。
本部分列出了适用于 HTTP 和非 HTTP 工作负荷的主机设置。 默认情况下,用于配置这些设置的环境变量可以有一个 DOTNET_ 或 ASPNETCORE_ 前缀,该前缀在以下设置列表中显示为 {PREFIX_} 占位符。 有关详细信息,请参阅默认生成器设置部分和配置:环境变量。
ASP.NET Core 应用配置和启动“主机”。 主机负责应用程序启动和生存期管理。 ASP.NET Core 模板创建的 WebApplicationBuilder 包含主机。 虽然可以在主机和应用程序配置提供程序中完成一些配置,但通常,只有主机必需的配置才应在主机配置中完成。
应用程序配置具有最高优先级,下一部分对此进行了详细介绍。 主机配置遵循应用程序配置,本文对此进行了介绍
var builder = WebApplication.CreateBuilder(args);
WebApplication.CreateBuilder 使用预配置的默认值初始化 类的新实例。 经过初始化的 WebApplicationBuilder (builder) 按照以下顺序为应用提供默认配置(从最高优先级到最低优先级):
以下列表包含从最高优先级到最低优先级的默认主机配置源:
在主机和应用程序配置中设置配置值时,将使用应用程序配置。
初始化主机生成器时,会提前锁定以下变量,并且它们不受应用程序配置的影响:
从应用程序配置而不是主机配置读取所有其他主机设置。
URLS 是许多不是启动设置的常见主机设置之一。 与不在前一个列表中的所有其他主机设置一样,稍后会从应用程序配置中读取 URLS。主机配置是应用程序配置的后备,因此主机配置可用于设置 URLS,但它将被应用程序配置中的任何配置源(如 appsettings.json)覆盖。
配置数据指南:
默认情况下,将在 JSON 配置源后注册用户机密配置源。 因此,用户机密密钥优先于 appsettings.json 和 appsettings.{Environment}.json 中的密钥。
有关存储密码或其他敏感数据的详细信息:
本文链接:https://blog.nnwk.net/article/135
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论