DOTNET CORE MVC (一)

在這裏插入圖片描述
以控臺的形式,運行.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>))

原創 ,轉載請註明出處。


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章