generic host 和其他程序冲突?这可能是原因!

吉云

今天咱来聊聊.NET 里面的 Generic Host,这玩意儿挺有用的,但一开始上手可能有点懵。别担心,我把我的折腾过程都记录下来,跟着我一步步来,保证你能搞明白!

啥是 Generic Host?

简单说,Generic Host 就是一个“大管家”,帮你管理各种服务的生命周期。啥叫服务?像日志记录、配置管理、依赖注入等等,这些都是服务。有 Generic Host,你就不用自己去操心这些服务的启动、停止、销毁等等破事,它全给你包圆。

generic host 和其他程序冲突?这可能是原因!

开搞!

咱得装个东西。打开你的项目,找到 NuGet 包管理器,搜 "*",找到后装上!

装好之后,咱就可以开始写代码。我习惯先创建一个控制台应用程序,方便演示。

在 * 文件里,我通常会这样写:


using *;

generic host 和其他程序冲突?这可能是原因!

using *;

using *;

public class Program

public static async Task Main(string[] args)

generic host 和其他程序冲突?这可能是原因!

// 创建一个 HostBuilder

var hostBuilder = *(args);

// 配置服务

*((hostContext, services) =>

// 注册你自己的服务

generic host 和其他程序冲突?这可能是原因!

*

// 注册后台任务

*

// 配置日志

*(logging =>

generic host 和其他程序冲突?这可能是原因!

*(); // 清理掉默认的

*(); // 加上控制台输出

// 构建并运行 Host

var host = *();

generic host 和其他程序冲突?这可能是原因!

await *();

看看,就这么几行代码,是不是挺简单的?我来给你解释一下:

    generic host 和其他程序冲突?这可能是原因!

  • *(args): 这行代码创建一个 HostBuilder 的实例,它已经帮你预先配置好一些常用的服务,比如日志、配置等等。
  • ConfigureServices: 这个方法用来注册你自己的服务。我这里注册两个服务,一个是 MyService,一个是 MyBackgroundService。
    • MyService 就是一个普通的服务,你可以通过依赖注入在其他地方使用它。
    • MyBackgroundService 是一个后台任务,它会在 Host 启动后自动运行,并在 Host 停止时自动停止。

    generic host 和其他程序冲突?这可能是原因!

  • ConfigureLogging: 这个方法用来配置日志。我这里把默认的日志提供程序都清理掉,然后添加一个控制台输出。
  • : 这行代码会构建一个 Host 的实例。
  • await *(): 这行代码会启动 Host,并等待它停止。

跑起来看看!

你可以运行你的程序。如果一切正常,你应该能在控制台看到你的后台任务输出的日志信息。

generic host 和其他程序冲突?这可能是原因!

然后我自己试着写 MyService 与 MyBackgroundService 这两个服务,以下是实践代码:



public class MyService

private readonly ILogger _logger;

generic host 和其他程序冲突?这可能是原因!

public MyService(ILogger logger)

_logger = logger;

public void DoSomething()

generic host 和其他程序冲突?这可能是原因!

_*("MyService 正在干活!");

public class MyBackgroundService : BackgroundService

generic host 和其他程序冲突?这可能是原因!

private readonly MyService _myService;

private readonly ILogger _logger;

public MyBackgroundService(MyService myService, ILogger logger)

_myService = myService;

_logger = logger;

generic host 和其他程序冲突?这可能是原因!

protected override async Task ExecuteAsync(CancellationToken stoppingToken)

while (!*)

_*("MyBackgroundService 正在运行...");

generic host 和其他程序冲突?这可能是原因!

await *(1000, stoppingToken);

generic host 和其他程序冲突?这可能是原因!

我定义MyService并写一个简单的DoSomething方法。

还通过继承BackgroundService类重写ExecuteAsync方法实现一个简单的后台服务。

总结一下

Generic Host 是不是很方便?它帮你把各种服务的管理都搞定,你只需要关注你的业务逻辑就行。我刚开始学的时候也觉得有点复杂,但多写几个例子,慢慢就熟悉。希望我的分享能帮到你!

generic host 和其他程序冲突?这可能是原因!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]