以控台的形式,運行.net core mvc 代碼, Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>();//指定網路主機要使用的啟動類型 ...
以控台的形式,運行.net core mvc 代碼,
Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>();//指定網路主機要使用的啟動類型。 });
返回預設的IHostBuilder ,程式初始化。
根據官方說明文檔:該方法做了這麼多事情:
將 ContentRootPath 設置為 GetCurrentDirectory() 的結果
從 "DOTNET_" 首碼的環境變數載入主機 IConfiguration
從提供的命令行參數載入主機 IConfiguration
從 "appsettings" 和 "appsettings" 載入應用 IConfiguration。[EnvironmentName] json "
使用條目程式集 EnvironmentName "開發" 時從用戶機密載入應用 IConfiguration
從環境變數載入應用 IConfiguration
從提供的命令行參數載入應用 IConfiguration
將 ILoggerFactory 配置為記錄到控制台、調試和事件源輸出
當 EnvironmentName 為 "開發" 時,對依賴關係註入容器啟用範圍驗證
此時json配置已經被載入。
1、ConfigureServices 方法 :運行時調用。使用此方法將服務添加到容器。用於配置依賴註入以在運行時根據依賴關係創建對象。
1)可選。
2)在 Configure
方法配置應用服務之前,由主機調用。
services.AddControllersWithViews();
預設運行時將Controller 註冊。
將服務添加到服務容器,使其在應用和 Configure 方法中可用。服務通過依賴關係註入或 ApplicationServices 進行解析。
註:IServiceCollection為.net core 自帶的一個容器。
IServiceCollection container = new ServiceCollection(); services.AddScoped<IMyDependency, MyDependency>(); services.AddTransient<IOperationTransient, Operation>(); services.AddScoped<IOperationScoped, Operation>(); services.AddSingleton<IOperationSingleton, Operation>(); services.AddSingleton<IOperationSingletonInstance>(new Operation(Guid.Empty));
AddTransient:每次從服務容器進行請求時創建的。 這種生存期適合輕量級、 無狀態的服務。作用域生存期服務 (AddScoped) 以每個客戶端請求(連接)一次的方式創建。
AddSingleton:單例,在第一次請求後,後續請求都使用相同實例。 如果應用需要單一實例行為,建議允許服務容器管理服務的生存期。不要實現單一實例設計模式並提供用戶代碼來管理對象在類中的生存期。
AddScoped:作用域生存期服務 ,以每個客戶端請求(連接)一次的方式創建。
2、Configure 方法用於指定應用響應 HTTP 請求的方式。可通過將中間件組件添加到 IApplicationBuilder 實例來配置請求管道。Configure 方法可使用 IApplicationBuilder,但未在服務容器中註冊。托管創建 IApplicationBuilder 並將其直接傳遞到 Configure。
Configure 用於配置中間件(middleware)以構建請求處理流水線。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }
IApplicationBuilder :將嵌入式定義的中間件委托添加到應用程式的請求管道。(IApplicationBuilder,Func <HttpContext,Func <Task>,Task>))
原創,轉載請註明出處。
又是深夜,先寫道這裡,後續繼續學習~