前言
本文主要講的是Asp.Net Core的啟動程序,幫助大家掌握應用程式的關鍵配置點,
1、創建專案
1.1、用Visual Studio 2019 創建WebApi專案,


這里面可以看到有兩個關鍵的類, 一個Program,一個stsrtup
Program里面有一個Main函式,Main函式里面會呼叫我們的CreateHosbuilder這個方法,CreateHosbuilder里面回傳了一個IHostBuilder,那么IHostBuilder就是我們應用程式啟動的核心介面
1.2、我們轉到定義看一下IHostBuilder這個介面的定義

這個介面主要有6個方法這里面我們需要關注的是:ConfigureAppConfiguration、ConfigureHostConfiguration、和ConfigureServices
為了演示整個應用程式的啟動程序我們回到Program,修改CreateHostBuilder 在里面添加一些代碼,把方法名列印出來
public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) //委托入參是:IConfigurationBuilder .ConfigureAppConfiguration(builder => { Console.WriteLine("ConfigureAppConfiguration"); }) //入參 IServiceCollection .ConfigureServices(services => { Console.WriteLine("ConfigureServices"); }) //入參IConfigurationBuilder .ConfigureHostConfiguration(builder => { Console.WriteLine("ConfigureHostConfiguration"); }) //入參 IWebHostBuilder .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("ConfigureWebHostDefaults"); webBuilder.UseStartup<Startup>(); }); }
Starup里面的主要有三個方法 構造行數、ConfigureServices、Configure 同樣的列印出來
public class Startup { public Startup(IConfiguration configuration) { Console.WriteLine("Startup建構式"); Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { Console.WriteLine("Startup.ConfigureServices"); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { Console.WriteLine("Startup.Configure"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
啟動應用程式看看,順序我標注在下面了,Starup里面的是按順序啟動的

如果應用程式啟動起來沒有輸出控制臺的修改一下啟動 選擇專案名稱 不要選擇IIS 我在次研究了半天哈哈

修改一下里面順序看看,可以發現執行的順序與之前略微不同,就是ConfigureService這一行跑到了Startup.ConfigureServices之后,

2、結論
這些委托注冊進去之后都是按一定順序來執行的

整個啟動程序分為5個階段:
2.1、ConfigureWebHostDefaults
這個階段注冊了我們應用程式必要的幾個組件,比如說配置的組件、容器的組件
2.2、ConfigureHostConfiguration
它是用來配置我們應用程式啟動時必要的配置,比如說我們應用程式啟動時所需要的監聽的埠、我們需要監聽的Url地址這些,在這個程序我們可以嵌入一些我們自己的配置內容注入到我們的配置的框架中去
2.3、ConfigureAppConfiguration
是讓我們來嵌入我們自己的組態檔供應用程式來讀取,這些配置將來就會在后續的應用程式執行程序中間每個組件讀取
2.4、ConfigureServices、ConfigureLogging、Startup、Startup.ConfigureServices
這些的話都是用來往容器里面注入我們的應用的組件
2.5、Startup.Configure
是我們用來注入我們的中間件,處理HttpContext整個請求程序的
3、Startup類非必要
Startup這個類其實不是必要的,在Progarm里面也可以配置,
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) //入參 IWebHostBuilder .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("ConfigureWebHostDefaults"); // webBuilder.UseStartup<Startup>(); webBuilder.ConfigureServices(services =>//對等Startup里面的Startup.ConfigureServices { services.AddControllers(); }) .Configure(app =>// 對等Startup里面的Startup.Configure { //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); //} app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }); }) //入參 IServiceCollection .ConfigureServices(services => { Console.WriteLine("ConfigureServices"); }) //委托入參是:IConfigurationBuilder .ConfigureAppConfiguration(builder => { Console.WriteLine("ConfigureAppConfiguration"); }) //入參IConfigurationBuilder .ConfigureHostConfiguration(builder => { Console.WriteLine("ConfigureHostConfiguration"); }) ;
這樣應用程式一樣的可以啟動起來 這只是為了規范建議還是留著哈哈
記得添加命名空間
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection;
參考視頻鏈接:https://time.geekbang.org/course/intro/272?code=PuP-H4FsFaRyMFC-qRHJndCmpGGNZ64zelNHZOYI1R8%3D
原文地址 https://www.cnblogs.com/w5942066/p/12803556.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/38404.html
標籤:.NET Core
上一篇:實作ASP.Net Core3.1運行在DockeDesktop下并用Nginx實作負載均衡
下一篇:OAuth2.0 基礎知識
