ASP.NET Core 2.0 中的WebHost(实现IWebHost的基类)是用于为进程提供 HTTP 服务器功能的基础结构项目,例如,如果正在实现 MVC Web 应用或 Web API 服务。它提供 ASP.NET Core 中所有新的基础结构优点,使用户能够使用依赖关系注入,在请求管道中插入中间件等,并精确地将这些IHostedServices用于后台任务。
.NET Core 2.1 中引入了Host(实现IHost的基类)。它能让用户拥有与WebHost相似的基础结构,使用它我们可以获取和Asp.net core一样的框架功能(依赖项注入、日志、配置、托管服务等),如果我们编写一个服务的时候,它提供了一个非常好用的框架。一个基本的示例代码如下:
public static async Task Main(string[] args) { var host = new HostBuilder().Build(); await host.RunAsync(); }
主要有如下两个步骤
通过HostBuilder生成一个Host
指向Host的Run函数运行主机
前面的代码只有一个空环境,要实现依赖项注入、日志、配置、托管服务等功能,还需要进一步的配置,本文的这里就简单的介绍一下通用主机的配置方法。
系统配置
系统配置有两个函数ConfigureHostConfiguration和ConfigureAppConfiguration
hostBuilder.ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); });
这两个函数使用比较类似,它们的关系是主机配置用于初始化 IHostingEnvironment,以供在应用的构建过程中使用。
依赖关系注入
通用主机集成了DI框架,如果要使用DI框架,则需要调用ConfigureServices函数极限依赖关系注入:
hostBuilder.ConfigureServices((context, services) => { services.AddScoped<MyService>(); });
配置日志
我们可以通过在ConfigureServices中通过DI框架配置日志系统,但HostBuilder单独提供了一个配置日志的接口ConfigureLogging:
hostBuilder.ConfigureLogging((hostContext, configLogging) => { configLogging.AddConsole(); configLogging.AddDebug(); });
它内部实际上依然是通过DI框架配置的日志系统。
通用配置
除了通过new一个HostBuilder外,系统还提供了一个创建HostBuilder的方法。
Host.CreateDefaultBuilder()
它的内部也是调用HostBuilder的,但他提供了一般常用的选项,具体包括:
将内容根设置为由Directory.GetCurrentDirectory返回的路径。
通过以下对象加载主机配置:
前缀为DOTNET_的环境变量。(例如,DOTNET_ENVIRONMENT)。
命令行参数。
按以下顺序加载应用配置:
appsettings.json。
appsettings.{Environment}.json。
应用在使用入口程序集的Development环境中运行时的机密管理器。
环境变量。
命令行参数。
配置控制台和调试输出的日志记录。日志记录包含 appsettings.json 或 appsettings.{Environment}.json 文件的日志记录配置部分中指定的日志筛选规则。
如果应用环境为"开发",请将ServiceProviderOptions.ValidateScopes设为true。有关详细信息,请参阅作用域验证。
也就是说,它基本上提供了我们所常用的大部分功能,并且它返回的也是一个HostBuilder,我们还可以在它的基础上接着配置,实现我们系统中的特有功能
本文ASP.NET Core通用主机的系统配置到此结束。业精于勤而荒于嬉,行成于思而毁于随。小编再次感谢大家对我们的支持!