从Hosting开始
一.介绍:
Hosting作为用户编程入口,往下管理HttpServer,往上构建并调用Http请求中间件的管线(RequestDelegate 在HttpAbstractions模块细说),承上启下。
1.设置运行环境(HostingEnvironment)
2.配置Startup类(非必须),以此配置依赖注入容器和Http请求中间件
3.启动HttpServer,激活Http请求流程
二.细说:
下面是基本的启动代码,我们慢慢来分析。
var config = new ConfigurationBuilder().AddCommandLine(args).Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseStartup<StartupBlockingOnStart>()
.Build();
using (host)
{
host.Start();
Console.ReadLine();
}
WebHostBuilder收集各种信息,最终是为了Builder一个WebHost,最后通过WebHost的Start方法(对Run方法的封装)来启动Http监听并处理Http请求。那WebHostBuilder到底要手机哪些信息呢?
1.通过IConfiguration对象收集各种配置信息,默认取环境变量的配置:
_config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.Build();
UseSetting方法和UseConfiguration方法是对该配置对象的补充,因此上面的第一行代码赋予程序从命令行(dotnet run --xxx)获取配置信息的能力,这样便可以根据启动信息确定运行环境(Development/Staging/Production).
2.通过ConfigureServices方法收集要配置到依赖注入容器中的service(可选,因为Startup提供了该功能)。
3.通过ConfigureLogging方法配置日志工厂(可选,可以在Startup的构造函数或Configure方法中配置)。
4.以上便是WebHostBuilder主要收集的信息,那为什么我们还看到了很多其他的扩展方法呢?其实其他的扩展方法都只是在调用UseSetting方法将各自要配置的对象添加到IConfigution中去,以便在Build的时候可以获取。
接下来便是WebHostBuilder要执行Build方法了,这里面主要做如下几件事:
1.通过上面配置的IConfigution对象new一个WebHostOptions对象,再由此对象初始化HostingEnvironment对象,至此程序运行的环境信息已经确定。
2.添加一个基础对象到以来注入容器,如:IHostingEnvironment/LoggerFactory/Startup等等,这也是为什么我们可以在Startup类的构造函数和Cinfogure方法注入到一些基本的Service的原因。
3.new一个WebHost对象并执行Initialize方法。由此转到WebHost类。
WebHost主要是通过Startup构建RequestDelegate并启动HttpServer。具体待下一篇细说吧...
第一次写博客,书面表达能力欠佳,无法真正抒发所思所想,还望大家指正。
asp.net core的各框架源码中的问题都欢迎来QQ群(294525042)讨论,本人对源码研究颇深,愿与大家分享!
从Hosting开始的更多相关文章
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
- 用"hosting.json"配置ASP.NET Core站点的Hosting环境
通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() . public class Program { p ...
- OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题
问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- Could not load file or assembly 'System.ServiceModel.DomainServices.Hosting'.系统找不到指定文件
项目部署到服务器后出现如下错误信息: Parser Error Message: Could not load file or assembly 'System.ServiceModel.Domain ...
- Hosting socket.io WebSocket apps in IIS using iisnode
In this post I explain how to configure a socket.io node.js application to use of WebSockets when ho ...
- Microsoft.Owin.Hosting 实现启动webapp.dll
Microsoft.Owin.Hosting 下面是 asp.net core 实现 using System;using System.Collections.Generic;using Syste ...
- Hosting static website on AWS
http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html#root-d ...
随机推荐
- hadoop编译
说明: hadoop版本:hadoop-2.5.0-cdh5.3.6 环境:centos6.4 必须可联网 hadoop 下载网址: http://archive.cloudera.com/cdh5/ ...
- HTML学习笔记四
今日学习内容为: 1.文本域操作 <html> <head> <meta charset="utf-8"/> <title>Java ...
- Unity 碰撞器和触发器的理解
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- Python2.7学习笔记-定义函数、filter/map/reduce/lambda
我把写的代码直接贴在下面了,注释的不是很仔细,主要是为了自己复习时方便查找,并不适合没有接触过python的人看,其实我也是初学者. #定义函数 def my_abs(x): if x>=0: ...
- 纯css实现京东导航菜单
纯CSS代码实现导航菜单,推荐在chrome预览! 预览请点击这里:mygithub <!doctype html> <html lang="en"> &l ...
- (译文)Python中的staticmethod与classmethod
原文是stackoverflow的一则高票回答,原文链接 可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删). 尽管classmethod和 ...
- storyboard页面跳转传值
受学姐的影响,习惯纯代码编程,这次要修改别人的代码,很多编程风格还不习惯. 在此之前,页面跳转我都用的是Navigation,故事板上的页面跳转带传值,让我卡了好半天. 页面跳转: [self per ...
- VS2015在Windows 10 下面安装经验
实体机环境:Windows 10 专业版(2017年2月28日 官方下载版本) VS2015:cn_visual_studio_enterprise_2015_with_update_3_x86_x6 ...
- WPF - 监听判断键盘组合键的按下
对于键盘事件PreviewKeyDown.PreviewKeyUp.KeyDown.KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性 ...
- 0CSS样式表与HTML结合的方法
从此王子和公主幸福的生活在了一起:) 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文 ...