Net8中的泛型主机使用

1.使用Microsoft.Extensions.Hosting插件,运行console项目

  1. 主要代码
          #region 使用Microsoft.Extensions.Hosting插件,运行console项目
     {
         Console.WriteLine("Hello, World!");

         //创建泛型主机构建者
         HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
         //创建泛型主机对象
         IHost host = hostBuilder.Build();
         //运行
         host.Run();
     }
     #endregion

2.使用Microsoft.Extensions.Hosting插件,运行web项目

  1. 主要代码
     #region 使用Microsoft.Extensions.Hosting插件,运行web项目
     {
         Console.WriteLine("Hello, World!");

         //创建泛型主机构建者
         WebApplicationBuilder hostBuilder = WebApplication.CreateBuilder(args);
         //创建泛型主机对象
         IHost host = hostBuilder.Build();
         //运行
         host.Run();
     }
     #endregion

3.使用Microsoft.Extensions.Hosting插件,依赖注入组件使用

  1. 创建Person类
  public class Person
  {
      public Guid Id { get; set; }

      public string Name { get; set; }

      public void Study() {
          Console.WriteLine("Study");
      }
  1. 主要代码
     #region 使用Microsoft.Extensions.Hosting插件,依赖注入组件使用
     {
         Console.WriteLine("Hello, World!");

         //创建泛型主机构建者
         HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
         hostBuilder.Services.AddSingleton<Person>();
         //创建泛型主机对象
         IHost host = hostBuilder.Build();
         var person = host.Services.GetRequiredService<Person>();
         person.Study();
         //获取Person对象
         //运行
         host.Run();
     }
     #endregion

4.使用Microsoft.Extensions.Hosting插件,日志组件使用

  1. 创建Person类
  public class Person
  {
      private readonly ILogger<Person> logger;


      public Person(ILogger<Person> logger)
      {
          this.logger = logger;
      }

      public Guid Id { get; set; }

      public string Name { get; set; }

      public void Study() {
   
          logger.LogError("Study");
          Console.WriteLine("Study");
      }
  }
  1. 主要代码
          #region 使用Microsoft.Extensions.Hosting插件,日志组件使用
     {
         Console.WriteLine("Hello, World!");

         //创建泛型主机构建者
         HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
         //容器组件使用
         hostBuilder.Services.AddSingleton<Person>();
         //日志组件使用
         hostBuilder.Logging.AddConsole();
         //配置文件根目录,需安装Karambolo.Extensions.Logging.File插件
         hostBuilder.Logging.AddFile(options =>
         {
             //配置文件路径
             options.Files = new[] { new LogFileOptions { Path = "Logs/log.txt", MaxFileSize = 10 * 1024 * 1024 } };
         });

         //创建泛型主机对象
         IHost host = hostBuilder.Build();
         var person = host.Services.GetRequiredService<Person>();
         person.Study();
         //获取Person对象
         //运行
         host.Run();
     }
     #endregion

5.使用Microsoft.Extensions.Hosting插件,配置组件使用

  1. 创建Person类
  public class Person
  {
      private readonly ILogger<Person> logger;
      private readonly IConfiguration configuration;

      public Person(ILogger<Person> logger,IConfiguration configuration)
      {
          this.logger = logger;
          this.configuration = configuration;
      }

      public Guid Id { get; set; }

      public string Name { get; set; }

      public void Study() {
          var noImplicitAny = configuration["compilerOptions:noImplicitAny"];
          Console.WriteLine("noImplicitAny:"+noImplicitAny);
          logger.LogError("Study");
          Console.WriteLine("Study");
      }
  }
  1. 主要代码
         #region 使用Microsoft.Extensions.Hosting插件,配置组件使用
     {
         Console.WriteLine("Hello, World!");

         //创建泛型主机构建者
         HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
         //容器组件使用
         hostBuilder.Services.AddSingleton<Person>();
         //日志组件使用
         hostBuilder.Logging.AddConsole();
         //配置文件根目录,需安装Karambolo.Extensions.Logging.File插件
         hostBuilder.Logging.AddFile(options =>
         {
             //配置文件路径
             options.Files = new[] { new LogFileOptions { Path = "Logs/log.txt", MaxFileSize = 10 * 1024 * 1024 } };
         });

         //配置文件使用
         hostBuilder.Configuration.AddJsonFile("appsettings.json");


         //创建泛型主机对象
         IHost host = hostBuilder.Build();
         var person = host.Services.GetRequiredService<Person>();
         person.Study();
         //获取Person对象
         //运行
         host.Run();
     }
     #endregion

5.使用Microsoft.Extensions.Hosting插件,后台任务使用

  1. 第一种IHostedService
 public class MyBackgroundService : IHostedService
 {
   
     public  Task StartAsync(CancellationToken cancellationToken)
     {
         Console.WriteLine("后台任务开始");
         Task.Run(() => {

             while (!cancellationToken.IsCancellationRequested) {

                 Console.WriteLine($"{DateTime.Now}");
               Thread.Sleep(1000);
             }
         });
         return Task.CompletedTask;
     }

     public Task StopAsync(CancellationToken cancellationToken)
     {
         Console.WriteLine("后台任务停止......");

         return Task.CompletedTask;
     }
 }
  1. 第二种BackgroundService
 public class BackgroundTask : BackgroundService
 {
     protected override async Task ExecuteAsync(CancellationToken stoppingToken)
     {
         Console.WriteLine("后台线程2开始:");

         await Task.Run(() =>
          {
              while (!stoppingToken.IsCancellationRequested)
              {

                  Console.WriteLine($"后台线程2开始:{DateTime.Now}");
                  Thread.Sleep(1000);
              }
          });
     }

     public override Task StopAsync(CancellationToken cancellationToken)
     {
         Console.WriteLine("后台线程2结束");

         return Task.CompletedTask;
     }
 }
  1. 主要代码
    #region 使用Microsoft.Extensions.Hosting插件,后台任务使用
    {
        Console.WriteLine("Hello, World!");

        //创建泛型主机构建者
        HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
        //容器组件使用
        hostBuilder.Services.AddSingleton<Person>();
        hostBuilder.Services.AddHostedService<MyBackgroundService>();
        hostBuilder.Services.AddHostedService<BackgroundTask>();
        //日志组件使用
        hostBuilder.Logging.AddConsole();
        //配置文件根目录,需安装Karambolo.Extensions.Logging.File插件
        hostBuilder.Logging.AddFile(options =>
        {
            //配置文件路径
            options.Files = new[] { new LogFileOptions { Path = "Logs/log.txt", MaxFileSize = 10 * 1024 * 1024 } };
        });

        //配置文件使用
        hostBuilder.Configuration.AddJsonFile("appsettings.json");


        //创建泛型主机对象
        IHost host = hostBuilder.Build();
        var person = host.Services.GetRequiredService<Person>();
        person.Study();
        //获取Person对象
        //运行
        host.Run();
    }
    #endregion

6.使用Microsoft.Extensions.Hosting插件,生命周期

  1. 主要代码
      Console.WriteLine("Hello, World!");

    //创建泛型主机构建者
    HostApplicationBuilder hostBuilder = Host.CreateApplicationBuilder(args);
    //容器组件使用
    hostBuilder.Services.AddSingleton<Person>();
    hostBuilder.Services.AddHostedService<MyBackgroundService>();
    hostBuilder.Services.AddHostedService<BackgroundTask>();

    //加载Microsoft.Extensions.Caching.StackExchangeRedis
    hostBuilder.Services.AddStackExchangeRedisCache(options =>
    {
        options.Configuration = "localhost:6379";
    });

    //日志组件使用
    hostBuilder.Logging.AddConsole();
    //配置文件根目录,需安装Karambolo.Extensions.Logging.File插件
    hostBuilder.Logging.AddFile(options =>
    {
        //配置文件路径
        options.Files = new[] { new LogFileOptions { Path = "Logs/log.txt", MaxFileSize = 10 * 1024 * 1024 } };
    });

    //配置文件使用
    hostBuilder.Configuration.AddJsonFile("appsettings.json");


    //创建泛型主机对象
    IHost host = hostBuilder.Build();

    // 获取IHostApplicationLifetime
    IHostApplicationLifetime lifetime = host.Services.GetService<IHostApplicationLifetime>();

    // 应用程序启动时回调。
    lifetime.ApplicationStarted.Register((o) =>
    {
        //获取分布式redis接口
        ServiceProvider serviceProvider = (ServiceProvider)o;
        IDistributedCache distributedCache = serviceProvider.GetService<IDistributedCache>();

        //商品数据存储到redis
        distributedCache.SetString("ceshi", "数据");

    }, host.Services);

    //应用程序正在停止回调
    lifetime.ApplicationStopping.Register(() =>
    {
        Console.WriteLine($"应用程序正在停止");
    });

    //应用程序已经停止回调
    lifetime.ApplicationStopped.Register((o) =>
    {
        //获取分布式redis接口
        ServiceProvider serviceProvider = (ServiceProvider)o;
        IDistributedCache distributedCache = serviceProvider.GetService<IDistributedCache>();

        //获取到数据
        distributedCache.Remove("ceshi");

    }, host.Services);

    var person = host.Services.GetRequiredService<Person>();
    person.Study();
    //获取Person对象
    //运行
    host.Run();
}
#endregion
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值