首頁 > 軟體

ASP.NET Core通用主機的系統設定

2022-07-08 14:01:18

ASP.NET Core 2.0 中的 WebHost(實現 IWebHost 的基礎類別)是用於為程序提供 HTTP 伺服器功能的基礎結構專案,例如,如果正在實現 MVC Web 應用或 Web API 服務。 它提供 ASP.NET Core 中所有新的基礎結構優點,使使用者能夠使用依賴關係注入,在請求管道中插入中介軟體等,並精確地將這些 IHostedServices 用於後臺任務。

.NET Core 2.1 中引入了 Host(實現 IHost 的基礎類別)。 它能讓使用者擁有與 WebHost相似的基礎結構,使用它我們可以獲取和Asp.net core一樣的框架功能(依賴項注入、紀錄檔、設定、託管服務等),如果我們編寫一個服務的時候,它提供了一個非常好用的框架。一個基本的範例程式碼如下: 

public static async Task Main(string[] args)
{
    var host = new HostBuilder().Build();
    await host.RunAsync();
}

主要有如下兩個步驟

  • 通過HostBuilder生成一個Host

  • 指向Host的Run函數執行主機

前面的程式碼只有一個空環境,要實現依賴項注入、紀錄檔、設定、託管服務等功能,還需要進一步的設定,本文的這裡就簡單的介紹一下通用主機的設定方法。

系統設定

系統設定有兩個函數ConfigureHostConfiguration和ConfigureAppConfiguration 

hostBuilder.ConfigureHostConfiguration(configHost =>
{
    configHost.SetBasePath(Directory.GetCurrentDirectory());
    configHost.AddJsonFile("hostsettings.json", optional: true);
    configHost.AddEnvironmentVariables(prefix: "PREFIX_");
    configHost.AddCommandLine(args);
});

這兩個函數使用比較類似,它們的關係是主機設定用於初始化 IHostingEnvironment,以供在應用的構建過程中使用。

依賴關係注入

通用主機整合了DI框架,如果要使用DI框架,則需要呼叫ConfigureServices函數極限依賴關係注入: 

hostBuilder.ConfigureServices((context, services) =>
{
    services.AddScoped<MyService>();
});

設定紀錄檔

我們可以通過在ConfigureServices中通過DI框架設定紀錄檔系統,但HostBuilder單獨提供了一個設定紀錄檔的介面ConfigureLogging: 

hostBuilder.ConfigureLogging((hostContext, configLogging) =>
{
    configLogging.AddConsole();
    configLogging.AddDebug();
});

它內部實際上依然是通過DI框架設定的紀錄檔系統。

通用設定

除了通過new一個HostBuilder外,系統還提供了一個建立HostBuilder的方法。

Host.CreateDefaultBuilder()

它的內部也是呼叫HostBuilder的,但他提供了一般常用的選項,具體包括:

  • 將內容根設定為由 Directory.GetCurrentDirectory 返回的路徑。

  • 通過以下物件載入主機設定:

  • 字首為 DOTNET_ 的環境變數。(例如,DOTNET_ENVIRONMENT)。

  • 命令列引數。

  • 按以下順序載入應用設定:

    • appsettings.json。

    • appsettings.{Environment}.json。

    • 應用在使用入口程式集的 Development 環境中執行時的機密管理器。

    • 環境變數。

    • 命令列引數。

  • 設定控制檯和偵錯輸出的紀錄檔記錄。 紀錄檔記錄包含 appsettings.json 或 appsettings.{Environment}.json 檔案的紀錄檔記錄設定部分中指定的紀錄檔篩選規則。

  • 如果應用環境為"開發",請將 ServiceProviderOptions.ValidateScopes 設為 true。 有關詳細資訊,請參閱作用域驗證

也就是說,它基本上提供了我們所常用的大部分功能,並且它返回的也是一個HostBuilder,我們還可以在它的基礎上接著設定,實現我們系統中的特有功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com