1,  新建一个空的AspNetCore项目,默认Program下的代码如下:

  public static void Main(string[] args)

         {

             BuildWebHost(args).Run();

         }

    public static IWebHost BuildWebHost(string[] args) =>

             WebHost.CreateDefaultBuilder(args)

                 .UseStartup<Startup>()

                 .Build();

代码很简单,有main入口开始执行,调用静态方法BuildWebHost开始构建WebHost.

2,今天主要探究下整个webhost的构建过程和涉及到的相关接口和类.

首先查看下这里的WebHost是个什么东东,F12查看源码

可以看到如图所示WebHost类实际上是IWebHostBuilder和IWebHost封装了下而已并没有多么神奇的功能。

3,接下来我们看下WebHost.CreateDefaultBuilder(args)这句,跟踪进去查看

貌似是实例化一个WebHostBuilder的对象。

Ok重点来了,这个就是我们整个流程的开始了,由CreateDefaultBuilder创建WebHostBuilder对象,然后由这个对象创建我们所熟知的WebHost对象,那么WebHost对象在哪呢,我们接着往下看

4,下一句是UseStartup<Startup>()这个是干嘛的,继续跟踪下去

可以看到UseStartup是一个IWebHostBuilder的泛型扩展方法,至于这个方法的作用主要就是指定Web主机要使用的启动类型。也就是将Startup这个类的类型作为参数传递进去,继续跟踪这个方法的实现

可以看出所指定的Startup类型会在DI容器中注册为单例形式,注册的处理过程被封装成Action。

至于这个Startup类有什么限制本章先不讨论。

5,接下来看看Build()这个方法

这一步貌似就是为了构建我们的第二个重要对象WebHost,至于具体如何构建的这里只是初步探究,暂不细究。

6,有了对象WebHost那接下来就是要(Run)运行起来了继续查看

可以看到又是一个扩展方法,不过这个扩展方法是IWebHost的扩展方法,到Run()这一步基本上我们的应用程序就跑起来了,当然Run()里的执行逻辑包括端口监听,Url处理等待这里先不细说。

总结:本篇初步探索了下AspNetCore的2大对象WebHost,WebHostBuilder。具体的对象的构建过程本章忽略了,仅供给自己和初入门的朋友一个参考,不足之处肯定多多的,欢迎指正

备注:AspNetCore的版本是2.0的哦,别弄差了。

Asp.NetCore初步探究的更多相关文章

  1. Asp.NetCore 自定义中间件

    这节演示一下自定义中间件,第一节我们讲到,中间件的处理流程就像一个俄罗斯套娃,那这种俄罗斯套娃型的流程内部是如何实现的呢,下面请看代码​. ​第一种写法是直接写在Configure方法中的,使用app ...

  2. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  3. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  4. Server in ASP.NET-Core

    .NET-Core Series Server in ASP.NET-Core DI in ASP.NET-Core Routing in ASP.NET-Core Error Handling in ...

  5. 为ASP.NetCore程序启用SSL

    紧接着上一篇搭建连接MySql的三层架构的ASP.NetCore2.0的WebApi的案例,这篇来实现为ASP.NetCore启用SSL支持 由于ASP.NetCore默认服务器Kestrel不像ii ...

  6. AutoMapper在asp.netcore中的使用

    # AutoMapper在asp.netcore中的使用  automapper 是.net 项目中针对模型之间转换映射的一个很好用的工具,不仅提高了开发的效率还使代码更加简洁,当然也是开源的,htt ...

  7. ASP.NETCore的Kestrel服务器

    什么是Kestrel服务器 Kestrel是开源的(GitHub提供的源代码),事件驱动的异步I / O服务器,用于在任何平台上托管ASP.NET应用程序.这是一个监听服务器和一个命令行界面.您将侦听 ...

  8. Asp.NetCore轻松学-使用Supervisor进行托管部署

    前言 上一篇文章 Asp.NetCore轻松学-部署到 Linux 进行托管 介绍了如何在 Centos 上部署自托管的 .NET Core 应用程序,接下来的内容就是介绍如何使用第三方任务管理程序来 ...

  9. Asp.NetCore轻松学-部署到 IIS 进行托管

    前言 经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地 ...

随机推荐

  1. DOS批处理前言

    -----------made by siwuxie095 1.批处理(Batch):望文知义,对某对象进行批量处理,实际上是一种脚本 2.DOS(Disk Operating System-磁盘操作 ...

  2. virtualbox Linux与Windows共享文件

    安装virtualbox增强功能 在Windows下新建文件用于共享,点设置->共享文件夹->添加共享文件,制定路径和名称(名称用于Linux中挂载使用)(选择固定分配) 在Linux中m ...

  3. 42-python中的矩阵、多维数组----numpy

    xzcfightingup   python中的矩阵.多维数组----numpy 1. 引言 最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易, ...

  4. nginx安装及基础配置(含jdk安装及配置)

    0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...

  5. .Net多线程 并行编程(三)---并行集合

    为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能. 而System.Collections和System.Collections.Generic命名 ...

  6. css简单分页

    html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  7. Linux objdump命令

    一.简介 objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具. 二.选项 http://my.oschina.net/alphajay/blog/7729 http://man. ...

  8. DNS/BIND in Debian

    Debian official document:http://www.debian.org/doc/manuals/network-administrator/ch-bind.html Buildi ...

  9. 03 Maven 坐标与依赖

    Maven 坐标与依赖 Maven 的一大功能是管理项目依赖.为了能自动化地解析任何一个 Java 构件, Maven 就必须将它们唯一标识,这就依赖管理的底层基础 一一 坐标.本章将详细分析 Mav ...

  10. oss browser

    版本问题 https://github.com/aliyun/oss-browser/blob/master/all-releases.md?spm=5176.doc61872.2.7.Ic2az6& ...