笔记内容来源于微软 MVP 杨旭老师 solenovex 的视频
Program 类:Web程序的入口
Program 类的本质就是一个控制台应用。
其中的 Main 方法是 Web 应用的入口方法。
我们可以在 Main方法中启动 Web 服务。
Program 类的源码
首先,Program 类中的 Main方法调用了 CreateWebHostBuilder(args).Build().Run() 方法。
该方法的最终目的和意义就是使用 CreateWebHostBuilder 方法返回的 IWebHostBuilder 接口类型对象来构建(Build)一个 WebServe 然后运行(Run)这个 WebServe。
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>();
}
CreateWebHostBuilder 方法返回的对象是静态类WebHost 的静态方法 CreateDefaultBuilder 方法返回的。
在 CreateWebHostBuilder 方法中我们可以看到一个 lambda 表达式,他返回了 WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
CreateDefaultBuilder 方法的源码
反编译 WebHost.CreateDefaultBuilder 方法的源码,我们先来看一下完整的代码实现。
我们发现 CreateDefaultBuilder 方法首先 new 了一个 WebHostBuilder 类型的对象 var builder = new WebHostBuilder(); 。
而 WebHostBuilder 类就实现了我们所需要返回的的 IWebHostBuilder 接口类型。
public static IWebHostBuilder CreateDefaultBuilder(string[] args) { var builder = new WebHostBuilder(); if (string.IsNullOrEmpty(builder.GetSetting(WebHostDefaults.ContentRootKey))) {