ASP.NET IHostBuilder
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 IHostBuilder 接口。该接口对于配置和构建 .NET 通用主机至关重要。
ASP.NET Core 应用程序使用 IHostBuilder 来设置服务、配置和应用程序的生命周期。它提供了一种一致的方式来构建主机应用程序。
基本定义
IHostBuilder 是 .NET 中的一个接口,它提供了配置和构建主机实例的方法。它是 Microsoft.Extensions.Hosting 命名空间的一部分。
主机负责应用程序的启动和生命周期管理。IHostBuilder 允许配置服务、日志记录、配置和依赖注入。
在 ASP.NET Core 中,WebApplication.CreateBuilder() 内部使用 IHostBuilder。它会创建一个具有 Web 特定默认设置的主机,同时允许进行自定义。
ASP.NET IHostBuilder 示例
以下示例演示了如何使用 IHostBuilder 创建自定义主机。
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
var hostBuilder = Host.CreateDefaultBuilder(args);
hostBuilder.ConfigureServices((context, services) =>
{
services.AddHostedService<WorkerService>();
services.AddSingleton<IMessageService, MessageService>();
if (context.HostingEnvironment.IsDevelopment())
{
services.AddTransient<IDevice, SimulatedDevice>();
}
else
{
services.AddTransient<IDevice, PhysicalDevice>();
}
});
hostBuilder.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
});
hostBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("appsettings.json", optional: true);
config.AddEnvironmentVariables();
if (args != null)
{
config.AddCommandLine(args);
}
});
using var host = hostBuilder.Build();
await host.RunAsync();
public class WorkerService : BackgroundService
{
private readonly IMessageService _messageService;
private readonly ILogger<WorkerService> _logger;
public WorkerService(IMessageService messageService,
ILogger<WorkerService> logger)
{
_messageService = messageService;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await _messageService.SendMessageAsync("Hello from worker!");
await Task.Delay(1000, stoppingToken);
}
}
}
public interface IMessageService
{
Task SendMessageAsync(string message);
}
public class MessageService : IMessageService
{
public Task SendMessageAsync(string message)
{
Console.WriteLine($"Message sent: {message}");
return Task.CompletedTask;
}
}
public interface IDevice { }
public class SimulatedDevice : IDevice { }
public class PhysicalDevice : IDevice { }
此示例展示了一个完整的控制台应用程序,该应用程序使用 IHostBuilder 创建 .NET 通用主机。该主机包含服务、日志记录和配置。
CreateDefaultBuilder 方法会创建一个具有默认设置的主机生成器。然后,我们在单独的方法调用中配置服务、日志记录和应用程序配置。
该示例通过注册不同的服务来演示依赖注入。它显示了针对开发和生产环境的特定于环境的服务注册。
WorkerService 是一个连续运行的后台服务。它使用依赖注入来获取 IMessageService 和日志记录器。
这种模式对于长时间运行的服务、工作进程或任何需要依赖注入和配置管理的应用程序都很有用。
来源
在本文中,我们探讨了 ASP.NET 8 中的 IHostBuilder 接口。这一强大功能提供了一种一致的方式来构建和配置 .NET 主机。