zoukankan      html  css  js  c++  java
  • .NET Core笔记-HostBuilder、Host

    IHostBuilder:

    在.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店铺信息
                });
    
  • 相关阅读:
    一个改写MBR的例子
    explore没有桌面
    Guidance of Set up FTP Server
    重启远程机器(不登录远程机器下的重启)
    Eclipse 一些小知识
    check time period
    Scrum 冲刺——Day 1
    Scrum 冲刺——Day 2
    初学C语言
    CSS选择器
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13657598.html
Copyright © 2011-2022 走看看