一.介绍:

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开始的更多相关文章

  1. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?

    在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...

  2. 用"hosting.json"配置ASP.NET Core站点的Hosting环境

    通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() . public class Program { p ...

  3. OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题

    问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...

  4. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  5. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  6. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  7. Could not load file or assembly 'System.ServiceModel.DomainServices.Hosting'.系统找不到指定文件

    项目部署到服务器后出现如下错误信息: Parser Error Message: Could not load file or assembly 'System.ServiceModel.Domain ...

  8. 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 ...

  9. Microsoft.Owin.Hosting 实现启动webapp.dll

    Microsoft.Owin.Hosting 下面是 asp.net core 实现 using System;using System.Collections.Generic;using Syste ...

  10. Hosting static website on AWS

    http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html#root-d ...

随机推荐

  1. java初级开发程序员(第三单元)

    1.if基本选择结构: 语法: if(条件){     //程序执行时,先判断条件.当结果为true(真)时,程序先执行大括号的代码块,再执行if结构(即{}部分)后面的代码.当结果为false(假) ...

  2. 49-Group Anagrams-(Medium) 题解

    1.题目 Given an array of strings, group anagrams together. For example, given: ["eat", " ...

  3. Keepalived安装与配置

      下载并解压Keepalived安装包到两台nginx所在的服务器   192.168.200.1   192.168.200.2     执行编译安装(安装目录设置为 /usr/local/kee ...

  4. Kettle 5.0源码编译

    下载源码请参考上一篇博文Kettle4.4.2源码分析 Kettle 5.0以前的库文件通过ant管理,5.0+的库文件通过ant+ivy管理.Eclipse一般都是安装ant插件,不安装ivy插件, ...

  5. 第三方库AFNetworking 3.1.0的简单使用

    AFNetworking是一个 在iOS开发中 使用非常多网络开源库.它是一个轻量级的网络请求API类库. 适用于iOS以及Mac OS X.它构建于在(Apple iOS开发文档) NSURLCon ...

  6. Kubernetes运维生态-Heapster分析

    Heapster在Kubernetes的运维生态中如下:集群的容器的监控数据收敛汇聚层 heapster1.0版本后内部分为event和metric两个进程,可制作为两个docker镜像部署为两个独立 ...

  7. java基础之路(一)

    Java数据类型分为内置类型和扩展类型两大类,其中的内置类型就是基本数据类型,而扩展类型则是Java语言根据基本类型扩展出的其他类型(也叫引用类型)(如:class,String等).本文主要讨论的是 ...

  8. jQuery_小测试

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 提示使用has() 2.在<ul>元素 ...

  9. Unity3d场景漫游---iTween实现

    接触U3D以来,我做过的场景漫游实现方式一般有以下几种: Unity3d中的Animation组件,通过设置摄像机的关键点实现场景漫游 第一人称或第三人称控制器 编写摄像机控制脚本 iTween iT ...

  10. Java日志工具之java.util.logging.Logger

    今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...