以控台的形式,運行.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>))
原創,轉載請注明出處。
又是深夜,先寫道這里,后續繼續學習~