.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店铺信息
});