从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 ...
随机推荐
- Ioc容器依赖注入-Spring 源码系列(2)
Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...
- KVO的概述与使用
一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知 ...
- 推荐几款主流的Css Reset
1.Eric Meyer’s “Reset CSS”(重置的很极端) 官方网址:CSS Tools: Reset CSS 2.HTML5 Doctor CSS Reset 官方网址:HTML5 Res ...
- 【Scala】Scala之Methods
一.前言 前面学习了Scala的Class,下面接着学习Method(方法). 二.Method Scala的方法与Java的方法类似,都是添加至类中的行为,但是在具体的实现细节上差异很大,下面展示一 ...
- Django的URL路由
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那 ...
- Laravel中间件
先谈一谈中间件的使用场景,比如路由转到一张页面,我们需要记录用户的cookie,或者检测用户的访问权限,这些操作如果全写在控制器里是不合适的,因为随着业务的扩充,控制器里的业务逻辑会越来越臃肿,难以维 ...
- CSS Sprites (css精灵)
CSS Sprites CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不 ...
- Asp.Net 常用工具类之Office—Excel导入(5)
之前在做一个项目的时候,客户方面只提供了一份简单的Excel文件,且要跟现有数据进行对接. 当时想到的是如果数据量不大,可以Excel一条一条加进去,无奈数据有几十兆!!! 换了一种思维,进行了导入: ...
- MySQL优化三(InnoDB优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- .NET Core跨平台:.NET Core项目部署到linux(Centos7)
1.开篇说明 a 上篇博客简单的说明了一下 使用.NET Core开发的一个总结,地址是:(http://www.cnblogs.com/hanyinglong/p/6442148.html),那么这 ...