.Net Core中的通用主機(一)——系統配置

ASP.NET Core 2.0 中的 WebHost(實現 IWebHost 的基類)是用於爲進程提供 HTTP 服務器功能的基礎結構項目,例如,若是正在實現 MVC Web 應用或 Web API 服務。 它提供 ASP.NET Core 中全部新的基礎結構優勢,使用戶可以使用依賴關係注入,在請求管道中插入中間件等,並精確地將這些 IHostedServices 用於後臺任務。web

.NET Core 2.1 中引入了 Host(實現 IHost 的基類)。 它能讓用戶擁有與 WebHost類似的基礎結構,使用它咱們能夠獲取和Asp.net core同樣的框架功能(依賴項注入、日誌、配置、託管服務等),若是咱們編寫一個服務的時候,它提供了一個很是好用的框架。一個基本的示例代碼以下: json

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

主要有以下兩個步驟api

  1. 經過HostBuilder生成一個Host
  2. 指向Host的Run函數運行主機

前面的代碼只有一個空環境,要實現依賴項注入、日誌、配置、託管服務等功能,還須要進一步的配置,本文的這裏就簡單的介紹一下通用主機的配置方法。服務器

 

系統配置 app

系統配置有兩個函數ConfigureHostConfiguration和ConfigureAppConfiguration 框架

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

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

 

依賴關係注入 ide

通用主機集成了DI框架,若是要使用DI框架,則須要調用ConfigureServices函數極限依賴關係注入: 函數

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

 

配置日誌 ui

咱們能夠經過在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,咱們還能夠在它的基礎上接着配置,實現咱們系統中的特有功能

相關文章
相關標籤/搜索