asp.net core之Host

2023-07-27 12:00:46

Host簡介

在ASP.NET Core中,Host是一個託管應用程式的宿主環境。它提供了一種統一的方式來啟動和執行應用程式,無論是在開發環境中還是在生產環境中。Host負責處理應用程式的生命週期、設定和依賴項管理等任務,使開發人員能夠專注於應用程式的業務邏輯。

Host是通過使用IHostBuilder介面和Host.CreateDefaultBuilder方法來建立的。IHostBuilder介面允許我們設定和構建Host,而Host.CreateDefaultBuilder方法提供了一組預設的設定選項,使得建立Host變得更加簡單。

Host的作用

  1. 生命週期管理:Host負責管理應用程式的生命週期。它在應用程式啟動時執行一些初始化任務,例如讀取組態檔、註冊依賴項等。在應用程式關閉時,Host會執行一些清理任務,例如釋放資源、儲存狀態等。通過Host,我們可以確保應用程式在啟動和關閉時都能夠執行必要的操作。
  2. 設定管理:Host提供了一種統一的方式來管理應用程式的設定。它可以從多個設定源(如命令列引數、環境變數、組態檔等)中讀取設定資訊,並將其應用於應用程式。這使得我們可以根據不同的環境(如開發、測試、生產)使用不同的設定,而無需修改應用程式的程式碼。
  3. 依賴項注入:Host還負責管理應用程式的依賴項。它可以設定和註冊依賴項容器,使得應用程式的各個元件可以方便地獲取它們所需的依賴項。通過依賴項注入,我們可以實現鬆耦合的元件設計,提高程式碼的可測試性和可維護性。

Host的用法

使用Host非常簡單。下面是一個基本的範例:

using Microsoft.Extensions.Hosting;
using System;

class Program
{
    static void Main(string[] args)
    {
        var host = Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                // 設定和註冊依賴項
                services.AddMyServices();
            })
            .Build();

        // 執行應用程式
        host.Run();
    }
}

在上面的範例中,我們使用Host.CreateDefaultBuilder方法建立了一個Host,並通過ConfigureServices方法設定和註冊了一些依賴項。最後,我們通過呼叫Build方法來構建Host,並通過呼叫Run方法來執行應用程式。

除了上面的基本用法之外,Host還提供了許多其他的設定選項和擴充套件點,以滿足不同的需求。我們可以通過呼叫ConfigureHostConfiguration方法來設定Host的設定,通過呼叫ConfigureAppConfiguration方法來設定應用程式的設定,通過呼叫ConfigureServices方法來設定依賴項,以及通過呼叫ConfigureLogging方法來設定紀錄檔記錄等。

Host的常見用例

  1. Web應用程式:在ASP.NET Core中,使用Host來託管Web應用程式是非常常見的用例。我們可以通過設定Host來啟動Kestrel伺服器,並將Web應用程式作為一個託管服務執行起來。Host還可以處理一些與Web應用程式相關的任務,例如HTTPS設定、請求管道設定等。
  2. 後臺任務:Host也可以用於託管後臺任務。我們可以通過Host來啟動和管理後臺任務的生命週期,並設定一些後臺任務的特定選項,例如任務排程、並行限制等。Host還可以處理一些與後臺任務相關的任務,例如紀錄檔記錄、例外處理等。
  3. 控制檯應用程式:使用Host來託管控制檯應用程式是另一個常見的用例。Host可以幫助我們管理控制檯應用程式的生命週期,並提供一些控制檯應用程式特定的選項,例如命令列引數解析、控制檯輸出等。

Generic Host和Web Host

Web Host(Web 主機)

Web Host是ASP.NET Core 2.x版本及之前的主機模型。它主要用於託管Web應用程式,提供了一些特定於Web開發的功能。Web Host繼承自Generic Host,並新增了一些與Web開發相關的預設設定和中介軟體。
Web Host提供以下功能:

  • 設定HTTP請求處理管道:Web Host通過中介軟體來處理HTTP請求,並提供了一些預設的中介軟體,如路由、靜態檔案服務、MVC等。
  • 整合IIS:Web Host可以與IIS(Internet Information Services)整合,以便通過IIS託管應用程式。
  • 整合Kestrel:Web Host使用Kestrel作為預設的Web伺服器,用於處理HTTP請求。

Generic Host(通用主機)

Generic Host是從ASP.NET Core 3.0版本引入的新主機模型。它是一個通用的、可延伸的主機,可以用於託管各種型別的應用程式,不僅限於Web應用程式。Generic Host提供了更多的靈活性和可延伸性,使開發者能夠構建更加通用的應用程式。
Generic Host提供以下功能:

  • 設定應用程式服務:Generic Host允許開發者設定應用程式所需的各種服務,如資料庫連線、紀錄檔記錄、身份驗證等。
  • 支援不同型別的應用程式:除了Web應用程式,Generic Host還可以用於託管後臺服務、控制檯應用程式等各種型別的應用程式。
  • 整合ASP.NET Core應用程式:Generic Host可以用於託管ASP.NET Core應用程式,但不提供與Web開發相關的預設設定和中介軟體。

區別

Web Host是從Generic Host派生而來,專注於Web應用程式的託管,提供了與Web開發相關的預設設定和中介軟體。
Generic Host是一個通用的主機模型,適用於各種型別的應用程式,提供了更多的靈活性和可延伸性。
在ASP.NET Core 3.0及之後的版本中,建議使用Generic Host來構建新的應用程式,因為它提供了更多的功能和擴充套件性。
Web Host適用於傳統的Web應用程式開發,提供了與Web開發相關的預設設定和中介軟體。Generic Host是一個通用的主機模型,適用於各種型別的應用程式,並提供了更多的靈活性和可延伸性。根據應用程式的需求,選擇適合的主機模型來構建和託管應用程式。

WebApplication

從asp.net coe6開始,預設的asp.net core模板已經改成使用WebApplication來建立Web應用程式。WebApplication提供了一種簡化的方式來設定和執行 Web 應用程式,而不需要 Startup 類。

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run();

在上面的範例中,我們使用WebApplication.CreateBuilder方法建立了一個WebApplication範例。
然後,通過builder.Services設定我們依賴注入。
最後,我們通過呼叫Build方法來構建WebApplication範例,並通過呼叫Run方法來執行應用程式。

WebApplication提供了許多其他的方法和擴充套件點,用於處理不同型別的請求、設定中介軟體、設定路由規則等。通過使用這些方法和擴充套件點,我們可以構建出複雜和強大的Web應用程式。
除了處理HTTP請求和生成HTTP響應之外,WebApplication還提供了一些其他的功能,例如依賴項注入、設定管理、紀錄檔記錄等。我們可以通過呼叫Services屬性來存取依賴項注入容器,通過呼叫Configuration屬性來存取設定資訊,通過呼叫Logging屬性來存取紀錄檔記錄功能。
通過使用WebApplication,我們可以構建出強大和靈活的Web應用程式。

總結

ASP.NET Core中的Host是一個重要的概念,它提供了一種可靠和靈活的方式來啟動、設定和管理應用程式。Host負責處理應用程式的生命週期、設定和依賴項管理等任務,使開發人員能夠專注於應用程式的業務邏輯。通過Host,我們可以實現各種不同型別的應用程式,例如Web應用程式、後臺任務和控制檯應用程式。希望本文對你理解和使用ASP.NET Core中的Host有所幫助。

歡迎進群催更。