.Net Core中的通用主机(一)——系统配置
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 环境中运行时的机密管理器。
- 环境变量。
- 命令行参数。
- 如果应用环境为"开发",请将 ServiceProviderOptions.ValidateScopes 设为 true。 有关详细信息,请参阅作用域验证。
也就是说,它基本上提供了我们所常用的大部分功能,并且它返回的也是一个HostBuilder,我们还可以在它的基础上接着配置,实现我们系统中的特有功能
.Net Core中的通用主机(一)——系统配置的更多相关文章
- .NET Core 中的通用主机和后台服务
简介 我们在做项目的时候, 往往要处理一些后台的任务. 一般是两种, 一种是不停的运行,比如消息队列的消费者.另一种是定时任务. 在.NET Framework + Windows环境里, 我们一般会 ...
- .Net Core中的通用主机(二)——托管服务
前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了..net core提供了一个通用的后台服务接口IHostedService,称为托管服务.一个注册托管服 ...
- asp.net core 3.x 通用主机原理及使用
一.前言 只是讲asp.net core 3.x通用主机的大致原理,这些东西是通过查看源码以及自己根据经验总结得来的,在文章中不会深入源码,因为个人觉得懂原理就晓得扩展点,后期碰到有需求的时候再仔细去 ...
- asp.net core 3.x 通用主机是如何承载asp.net core的-上
一.前言 上一篇<asp.net core 3.x 通用主机原理及使用>扯了下3.x中的通用主机,刚好有哥们写了篇<.NET Core 3.1和WorkerServices构建Win ...
- asp.net core 系列 17 通用主机 IHostBuilder
一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...
- 翻译 - ASP.NET Core 基本知识 - 通用主机 (Generic Host)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0 ...
- Asp.net Core 2.1新功能Generic Host(通用主机),了解一下
什么是Generic Host ? 这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host. Web Host –适用于托管W ...
- net Core 2.1新功能Generic Host(通用主机)
net Core 2.1新功能Generic Host(通用主机) http://doc.okbase.net/CoderAyu/archive/301859.html 什么是Generic Host ...
- asp.net core 系列 16 Web主机 IWebHostBuilder
一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...
随机推荐
- Note for "Some Remarks on Writing Mathematical Proofs"
John M. Lee is a famous mathematician, who bears the reputation of writing the classical book " ...
- JMeter监控Slave机器是否执行
netstat -anp | grep 192.168.1.161 | grep 19091 | wc -l http://www.linuxidc.com/Linux/2014-09/106497. ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-5项目数据库操作封装操作-EF框架
EF框架有三种基本的方式:DB First(数据库优先),Model First(模型优先),Code First(代码优先). Entity Framework4.1之前EF支持“Database ...
- Codeforces 660F Bear and Bowling 4 斜率优化 (看题解)
Bear and Bowling 4 这也能斜率优化... max[ i ] = a[ i ] - a[ j ] - j * (sum[ i ] - sum[ j ])然后就能斜率优化啦, 我咋没想到 ...
- js清除单选框所选的值
js清除单选框所选的值 $("input[type='radio']").removeAttr('checked');
- word,excel,ppt在线预览功能
我们在开发web项目时,尤其类似oa功能时总会遇到上传附件并在线预览的功能,发现一款api比较好使,下面简单介绍一下. 微软官网本身提供了在线预览的API 首先将要预览的文档转成.docx,.xlsx ...
- Idea中快捷键与小技巧的总结-->持续更新
1.Scala类或单例对象中快速声明实例对象: eg. new SparkContext(conf).var 系统会自动提示,可以自动补全,如图: 2.ctrl+i与ctrl+o的区别: ctrl + ...
- Linux学习之RPM包管理-yum管理(十七)
Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...
- [ 中危 ] dp意见反馈处存储型XSS
XSS平台架设攻击代码,有很多,如我是在http://xss.fbisb.com上架设的. 在 xxx.dianping.com系统意见反馈处插入xss代码提交,而后等待后台管理员点击,可打到其COO ...
- JVM 调优-给你的java应用看看病
目录 java 应用 1 cpu 负载过高 1.1 分析问题 1.2 解决方案 2 内存占用过多 2.1 从内存回收方面 2.2 从代码层面 java 应用 1 cpu 负载过高 1.1 分析问题 首 ...