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. 7.Reverse Integer (INT; Overflow)

    Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 思路:要注意溢出 ...

  2. 安装tftp服务器进行文件传输

    1. 安装: sudo apt-get install tftp-hpa tftpd-hpa ps: tftpd是服务器,tftp是客户端,客户端能发送和获取,服务器不能动. 2. 配置文件: sud ...

  3. 转载博客:rabbitmq

    原文出处:http://www.cnblogs.com/sam-uncle/p/9202933.html 假设有这一些比较耗时的任务,按照上一次的那种方式,我们要一直等前面的耗时任务完成了之后才能接着 ...

  4. Boost 库uuid 的使用

    UUID 简介 通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分. uuid 版 ...

  5. Django之ORM数据库

    5.1 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库 ...

  6. Java图形化界面设计——布局管理器之GridBagLayout

    GridBagLayout 不会随着窗口的变化标签随之发生变化,可固定. ---------------------------------------------------------- impo ...

  7. Laravel 5.x 启动过程分析

     Posted on 2015年9月11日 by  学院君 1.初始化Application 1.1 注册基本绑定 app -> Application实例(Illuminate\Foundat ...

  8. Netty 源码 NioEventLoop(一)初始化

    Netty 源码 NioEventLoop(一)初始化 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) Netty 基于事件 ...

  9. Netty系列(四)TCP拆包和粘包

    Netty系列(四)TCP拆包和粘包 一.拆包和粘包问题 (1) 一个小的Socket Buffer问题 在基于流的传输里比如 TCP/IP,接收到的数据会先被存储到一个 socket 接收缓冲里.不 ...

  10. 2.自己搭建的一个简易的ioc容器

    1.persondao类namespace MyselfIoC{    public class PersonDao    {        public override string ToStri ...