.NET Core笔记-HostBuilder、Host IHostBuilder: IHost接口: IHostApplicationLifetime接口:

在.NET Core 3.0中采用了IHostBuilder用于创建Host,摒弃了WebHostBuilder的创建方式
以下代码是V3.0中提供的模板代码:

   1:  public class Program
   2:  {
   3:      public static void Main(string[] args)
   4:      {
   5:          CreateHostBuilder(args).Build().Run();
   6:      }
   7:   
   8:      public static IHostBuilder CreateHostBuilder(string[] args) =>
   9:          Host.CreateDefaultBuilder(args)
  10:              .ConfigureWebHostDefaults(webBuilder =>
  11:              {
  12:                  webBuilder.UseStartup<Startup>();
  13:              });
  14:  }

ConfigureWebHostDefaults()方法:
由于新的主机构建器是通用主机构建器,因此我们必须让它知道我们打算为Web主机配置默认设置。这些默认配置我们可以在ConfigureWebHostDefaults()方法中实现

以下为IHostBuilder接口代码:

    public interface IHostBuilder
    {
        IDictionary<object, object> Properties
        {
            get;
        }

        IHostBuilder ConfigureHostConfiguration(Action<IConfigurationBuilder> configureDelegate);//配置HostConfiguration

        IHostBuilder ConfigureAppConfiguration(Action<HostBuilderContext, IConfigurationBuilder> configureDelegate);

        IHostBuilder ConfigureServices(Action<HostBuilderContext, IServiceCollection> configureDelegate);//配置ServiceCollection

        IHostBuilder UseServiceProviderFactory<TContainerBuilder>(IServiceProviderFactory<TContainerBuilder> factory);

        IHostBuilder UseServiceProviderFactory<TContainerBuilder>(Func<HostBuilderContext, IServiceProviderFactory<TContainerBuilder>> factory);

        IHostBuilder ConfigureContainer<TContainerBuilder>(Action<HostBuilderContext, TContainerBuilder> configureDelegate);

        IHost Build();
    }

IHostBuilder接口扩展方法:

    public static class HostingHostBuilderExtensions
    {
        public static IHostBuilder ConfigureAppConfiguration(this IHostBuilder hostBuilder, Action<IConfigurationBuilder> configureDelegate)
        {
            throw null;
        }

        public static IHostBuilder ConfigureContainer<TContainerBuilder>(this IHostBuilder hostBuilder, Action<TContainerBuilder> configureDelegate)
        {
            throw null;
        }

        public static IHostBuilder ConfigureLogging(this IHostBuilder hostBuilder, Action<HostBuilderContext, ILoggingBuilder> configureLogging)
        {
            throw null;
        }

        public static IHostBuilder ConfigureLogging(this IHostBuilder hostBuilder, Action<ILoggingBuilder> configureLogging)
        {
            throw null;
        }

        public static IHostBuilder ConfigureServices(this IHostBuilder hostBuilder, Action<IServiceCollection> configureDelegate)
        {
            throw null;
        }

        public static Task RunConsoleAsync(this IHostBuilder hostBuilder, Action<ConsoleLifetimeOptions> configureOptions, CancellationToken cancellationToken = default(CancellationToken))
        {
            throw null;
        }

        public static Task RunConsoleAsync(this IHostBuilder hostBuilder, CancellationToken cancellationToken = default(CancellationToken))
        {
            throw null;
        }

        public static IHostBuilder UseConsoleLifetime(this IHostBuilder hostBuilder)
        {
            throw null;
        }

        public static IHostBuilder UseConsoleLifetime(this IHostBuilder hostBuilder, Action<ConsoleLifetimeOptions> configureOptions)
        {
            throw null;
        }

        public static IHostBuilder UseContentRoot(this IHostBuilder hostBuilder, string contentRoot)
        {
            throw null;
        }

        public static IHostBuilder UseDefaultServiceProvider(this IHostBuilder hostBuilder, Action<ServiceProviderOptions> configure)
        {
            throw null;
        }

        public static IHostBuilder UseDefaultServiceProvider(this IHostBuilder hostBuilder, Action<HostBuilderContext, ServiceProviderOptions> configure)
        {
            throw null;
        }

        public static IHostBuilder UseEnvironment(this IHostBuilder hostBuilder, string environment)
        {
            throw null;
        }
    }

方法说明:
Build():创建IHost

   1:  public IHost Build()
   2:  {
   3:      if (_hostBuilt)
   4:      {
   5:          throw new InvalidOperationException("Build can only be called once.");
   6:      }
   7:      _hostBuilt = true;
   8:   
   9:      BuildHostConfiguration();
  10:      CreateHostingEnvironment();
  11:      CreateHostBuilderContext();
  12:      BuildAppConfiguration();
  13:      CreateServiceProvider();
  14:   
  15:      return _appServices.GetRequiredService<IHost>();
  16:  }

Run():运行应用程序并阻止调用线程,直到主机关闭

   1:  public static void Run(this IHost host)
   2:  {
   3:      host.RunAsync().GetAwaiter().GetResult();
   4:  }

IHost接口:

    public interface IHost : IDisposable
    {
        IServiceProvider Services {get;}

        Task StartAsync(CancellationToken cancellationToken = default(CancellationToken));

        Task StopAsync(CancellationToken cancellationToken = default(CancellationToken));
    }

Services属性,通过该属性可以拿到所有Host初始化时所注入的对象信息
IHostBuilder接口所承担的核心功能就是程序的初始化,通过:IHost Build()来完成,
IHostBuilder初始化内容包括以下功能:(这些功能的初始化是通过IHostBuilder提供的接口获取用户输入的信息后,通过调用Build()方法来完成初始化。)

HostConfiguration、HostingEnvironment、HostBuilderContext、ServiceCollection

IHostApplicationLifetime接口:

Host生命周期订阅接口,该接口提供了一种我们可以在程序运行期间进行管理的功能,如程序的启动与停止事件的订阅。

public interface IHostApplicationLifetime
    {
        CancellationToken ApplicationStarted
        {
            get;
        }

        CancellationToken ApplicationStopping
        {
            get;
        }

        CancellationToken ApplicationStopped
        {
            get;
        }

        void StopApplication();
    }

订阅声明周期事件:

 applicationLifetime.ApplicationStarted.Register(() =>
            {
                app.ApplicationServices.GetService<ShopInfoexBus>().SyncSsoShop(); //同步SSO店铺信息
            });