今天咱来聊聊.NET 里面的 Generic Host,这玩意儿挺有用的,但一开始上手可能有点懵。别担心,我把我的折腾过程都记录下来,跟着我一步步来,保证你能搞明白!
啥是 Generic Host?
简单说,Generic Host 就是一个“大管家”,帮你管理各种服务的生命周期。啥叫服务?像日志记录、配置管理、依赖注入等等,这些都是服务。有 Generic Host,你就不用自己去操心这些服务的启动、停止、销毁等等破事,它全给你包圆。
开搞!
咱得装个东西。打开你的项目,找到 NuGet 包管理器,搜 "*",找到后装上!
装好之后,咱就可以开始写代码。我习惯先创建一个控制台应用程序,方便演示。
在 * 文件里,我通常会这样写:
using *;

using *;
using *;
public class Program
public static async Task Main(string[] args)

// 创建一个 HostBuilder
var hostBuilder = *(args);
// 配置服务
*((hostContext, services) =>
// 注册你自己的服务

*
// 注册后台任务
*
// 配置日志
*(logging =>

*(); // 清理掉默认的
*(); // 加上控制台输出
// 构建并运行 Host
var host = *();

await *();
看看,就这么几行代码,是不是挺简单的?我来给你解释一下:
- *(args): 这行代码创建一个 HostBuilder 的实例,它已经帮你预先配置好一些常用的服务,比如日志、配置等等。
- ConfigureServices: 这个方法用来注册你自己的服务。我这里注册两个服务,一个是 MyService,一个是 MyBackgroundService。
- MyService 就是一个普通的服务,你可以通过依赖注入在其他地方使用它。
- MyBackgroundService 是一个后台任务,它会在 Host 启动后自动运行,并在 Host 停止时自动停止。
- ConfigureLogging: 这个方法用来配置日志。我这里把默认的日志提供程序都清理掉,然后添加一个控制台输出。
- : 这行代码会构建一个 Host 的实例。
- await *(): 这行代码会启动 Host,并等待它停止。
跑起来看看!
你可以运行你的程序。如果一切正常,你应该能在控制台看到你的后台任务输出的日志信息。
然后我自己试着写 MyService 与 MyBackgroundService 这两个服务,以下是实践代码:
public class MyService
private readonly ILogger _logger;

public MyService(ILogger logger)
_logger = logger;
public void DoSomething()

_*("MyService 正在干活!");
public class MyBackgroundService : BackgroundService

private readonly MyService _myService;
private readonly ILogger _logger;
public MyBackgroundService(MyService myService, ILogger logger)
_myService = myService;
_logger = logger;

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
while (!*)
_*("MyBackgroundService 正在运行...");

await *(1000, stoppingToken);
我定义MyService并写一个简单的DoSomething方法。
还通过继承BackgroundService类重写ExecuteAsync方法实现一个简单的后台服务。
总结一下
Generic Host 是不是很方便?它帮你把各种服务的管理都搞定,你只需要关注你的业务逻辑就行。我刚开始学的时候也觉得有点复杂,但多写几个例子,慢慢就熟悉。希望我的分享能帮到你!