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();
}

主要有如下两个步骤

  1. 通过HostBuilder生成一个Host
  2. 指向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,我们还可以在它的基础上接着配置,实现我们系统中的特有功能

.Net Core中的通用主机(一)——系统配置的更多相关文章

  1. .NET Core 中的通用主机和后台服务

    简介 我们在做项目的时候, 往往要处理一些后台的任务. 一般是两种, 一种是不停的运行,比如消息队列的消费者.另一种是定时任务. 在.NET Framework + Windows环境里, 我们一般会 ...

  2. .Net Core中的通用主机(二)——托管服务

    前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了..net core提供了一个通用的后台服务接口IHostedService,称为托管服务.一个注册托管服 ...

  3. asp.net core 3.x 通用主机原理及使用

    一.前言 只是讲asp.net core 3.x通用主机的大致原理,这些东西是通过查看源码以及自己根据经验总结得来的,在文章中不会深入源码,因为个人觉得懂原理就晓得扩展点,后期碰到有需求的时候再仔细去 ...

  4. asp.net core 3.x 通用主机是如何承载asp.net core的-上

    一.前言 上一篇<asp.net core 3.x 通用主机原理及使用>扯了下3.x中的通用主机,刚好有哥们写了篇<.NET Core 3.1和WorkerServices构建Win ...

  5. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

  6. 翻译 - ASP.NET Core 基本知识 - 通用主机 (Generic Host)

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0 ...

  7. Asp.net Core 2.1新功能Generic Host(通用主机),了解一下

    什么是Generic Host ? 这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host. Web Host –适用于托管W ...

  8. net Core 2.1新功能Generic Host(通用主机)

    net Core 2.1新功能Generic Host(通用主机) http://doc.okbase.net/CoderAyu/archive/301859.html 什么是Generic Host ...

  9. asp.net core 系列 16 Web主机 IWebHostBuilder

    一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...

随机推荐

  1. 【Android】Android 手机忘记锁屏密码的解决办法

    对于忘记Android锁屏密码的筒子们,除重新刷包或者wipe data外,还可用adb来删除密码: 方法很简单 1.手机连接电脑,不要打开数据连接,在充电模式下进行. 2.在电脑上,解压adb.zi ...

  2. loadrunner下的putty和plink

    loadrunner中是有集成plink和putty的,难怪可以通过监控机监控linux上的负载情况呢,可以通过这个命令来进行访问:C:\Program Files\Mercury\LoadRunne ...

  3. 删除了原有的offset之后再次启动会报错park Streaming from Kafka has error numRecords must not ...

          笔者使用Spark streaming读取Kakfa中的数据,做进一步处理,用到了KafkaUtil的createDirectStream()方法:该方法不会自动保存topic parti ...

  4. gitlab之一: gitlab安装配置使用

    参考: gitlab 安装和配置 gitlab下载地址: https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/ 官方教程: https://about.gitl ...

  5. Python交互图表可视化Bokeh:2. 辅助参数

    图表辅助参数设置 辅助标注.注释.矢量箭头 参考官方文档:https://bokeh.pydata.org/en/latest/docs/user_guide/annotations.html#col ...

  6. 初窥Java之四

    一.条件判断之if判断 语法格式:if(结果为布尔类型的结果值){ 功能执行语句; }else if(结果为布尔类型的结果值){ 功能执行语句; } ....{ }else{ 功能执行语句: } 注意 ...

  7. 《Thinking In Java》阅读笔记

    <Thinking In Java>阅读笔记 前四章:对象导论. 一切都是对象. 操作符. 控制执行流程 public在一个文件中只能有一个,可以是一个类class或者一个接口interf ...

  8. vdom,diff,key 算法的了解

    <ul id='list'> <li class='item'>Item1</li> <li class='item'>Item2 </li> ...

  9. LightOJ 1074 - Extended Traffic 【SPFA】(经典)

    <题目链接> 题目大意:有n个城市,每一个城市有一个拥挤度Ai,从一个城市I到另一个城市J的时间为:(A(v)-A(u))^3.问从第一个城市到达第k个城市所花的时间,如果不能到达,或者时 ...

  10. 使用ORM进行前后端数据交互

    使用ORM进行数据交互 前期准备 必备知识:ORM操作,数据库多表操作.Django部分知识. 三张表:班级.老师.学生 一对多关系:班级与学生 多对多关系:班级与老师 #创建班级表 class Cl ...