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查看源码

Asp.NetCore初步探究-LMLPHP

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

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

Asp.NetCore初步探究-LMLPHP

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

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

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

Asp.NetCore初步探究-LMLPHP

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

Asp.NetCore初步探究-LMLPHP

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

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

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

Asp.NetCore初步探究-LMLPHP

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

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

Asp.NetCore初步探究-LMLPHP

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

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

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

05-11 11:13