Obecný hostitel .NET

Šablony pracovní služby vytvoří obecného hostitele .NET, HostBuilder . Obecného hostitele lze použít s jinými typy aplikací .NET, například konzolových aplikací.

Hostitel je objekt, který zapouzdřuje prostředky aplikace, jako například:

  • Vkládání závislostí (DI)
  • Protokolování
  • Konfigurace
  • IHostedService implementaci

Při spuštění hostitele zavolá IHostedService.StartAsync každou implementaci IHostedService zaregistrovanou v kolekci hostovaných služeb kontejneru služby. V aplikaci pracovní služby se pro všechny IHostedService implementace, které obsahují BackgroundService instance, BackgroundService.ExecuteAsync zavolaly své metody.

Hlavním důvodem pro zahrnutí všech vzájemně závislých prostředků aplikace do jednoho objektu je Správa životního cyklu: Kontrola spuštění aplikace a bezproblémové vypnutí. Toho se dosáhne pomocí balíčku NuGet Microsoft. Extensions. hosting .

Nastavení hostitele

Hostitel je obvykle nakonfigurovaný, sestavený a spouštěný pomocí kódu ve Program třídě. MainMetoda:

Šablony služby .NET Worker generují následující kód pro vytvoření obecného hostitele:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
}

Výchozí nastavení tvůrce

CreateDefaultBuilderMetoda:

  • Nastaví kořen obsahu na cestu vrácenou GetCurrentDirectory() .
  • Načte konfiguraci hostitele z:
    • Proměnné prostředí s předponou DOTNET_ .
    • Argumenty příkazového řádku.
  • Načte konfiguraci aplikace z:
    • appsettings.js.
    • appSettings. {Environment}. JSON.
    • Správce tajných klíčů při spuštění aplikace v Development prostředí
    • Proměnné prostředí.
    • Argumenty příkazového řádku.
  • Přidá následující zprostředkovatele protokolování:
    • Konzola
    • Ladění
    • EventSource
    • Protokol událostí (pouze při spuštění v systému Windows)
  • Povolí ověřování oboru a ověřování závislostí , pokud je prostředí Development .

ConfigureServicesMetoda zpřístupňuje možnost přidávat služby do Microsoft.Extensions.DependencyInjection.IServiceCollection instance. Později můžete tyto služby zpřístupnit z injektáže závislosti.

Služby poskytované rozhraním

Následující služby jsou registrovány automaticky:

IHostApplicationLifetime

Založit IHostApplicationLifetime službu do libovolné třídy pro zpracování úloh po spuštění a řádné vypnutí. Tři vlastnosti rozhraní jsou tokeny zrušení použité k registraci metod spuštění aplikace a obslužné rutiny události zastavení aplikace. Rozhraní obsahuje také StopApplication() metodu.

Následující příklad je IHostedService implementace, která registruje IHostApplicationLifetime události:

using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace AppLifetime.Example
{
    public class ExampleHostedService : IHostedService
    {
        private readonly ILogger _logger;

        public ExampleHostedService(
            ILogger<ExampleHostedService> logger,
            IHostApplicationLifetime appLifetime)
        {
            _logger = logger;

            appLifetime.ApplicationStarted.Register(OnStarted);
            appLifetime.ApplicationStopping.Register(OnStopping);
            appLifetime.ApplicationStopped.Register(OnStopped);
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("1. StartAsync has been called.");

            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("4. StopAsync has been called.");

            return Task.CompletedTask;
        }

        private void OnStarted()
        {
            _logger.LogInformation("2. OnStarted has been called.");
        }

        private void OnStopping()
        {
            _logger.LogInformation("3. OnStopping has been called.");
        }

        private void OnStopped()
        {
            _logger.LogInformation("5. OnStopped has been called.");
        }
    }
}

Šablonu služby pracovního procesu můžete upravit tak, aby se přidala ExampleHostedService implementace:

using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace AppLifetime.Example
{
    class Program
    {
        static Task Main(string[] args) =>
            CreateHostBuilder(args).Build().RunAsync();

        static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((_, services) =>
                    services.AddHostedService<ExampleHostedService>());
    }
}

Aplikace by psala následující vzorový výstup:

// Sample output:
//     info: ExampleHostedService[0]
//           1. StartAsync has been called.
//     info: ExampleHostedService[0]
//           2. OnStarted has been called.
//     info: Microsoft.Hosting.Lifetime[0]
//           Application started.Press Ctrl+C to shut down.
//     info: Microsoft.Hosting.Lifetime[0]
//           Hosting environment: Production
//     info: Microsoft.Hosting.Lifetime[0]
//           Content root path: ..\app-lifetime\bin\Debug\net5.0
//     info: ExampleHostedService[0]
//           3. OnStopping has been called.
//     info: Microsoft.Hosting.Lifetime[0]
//           Application is shutting down...
//     info: ExampleHostedService[0]
//           4. StopAsync has been called.
//     info: ExampleHostedService[0]
//           5. OnStopped has been called.

IHostLifetime

IHostLifetimeImplementace určuje, kdy se hostitel spustí a kdy se zastaví. Použije se Poslední registrovaná implementace.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime je výchozí IHostLifetime implementací. ConsoleLifetime:

  • Naslouchá pro spuštění procesu vypnutí stisknutím CTRL + + C, SIGINTnebo SIGTERM a volání StopApplication .
  • Odblokuje rozšíření jako RunAsync a WaitForShutdownAsync .

IHostEnvironment

Vložením IHostEnvironment služby do třídy získáte informace o následujících nastaveních:

Konfigurace hostitele

Konfigurace hostitele se používá ke konfiguraci vlastností implementace IHostEnvironment .

Konfigurace hostitele je k dispozici v HostBuilderContext.Configuration v rámci ConfigureAppConfiguration metody. Při volání ConfigureAppConfiguration metody, HostBuilderContext a IConfigurationBuilder jsou předány do configureDelegate . configureDelegateJe definován jako Action<HostBuilderContext, IConfigurationBuilder> . Kontext tvůrce hostitele zpřístupňuje .Configuration vlastnost, která je instancí IConfiguration . Představuje konfiguraci vytvořenou z hostitele, zatímco IConfigurationBuilder je objekt tvůrce, který se používá ke konfiguraci aplikace.

Tip

Po ConfigureAppConfiguration volání je HostBuilderContext.Configuration nahrazena konfigurací aplikace.

Chcete-li přidat konfiguraci hostitele, zavolejte ConfigureHostConfiguration na IHostBuilder . ConfigureHostConfiguration dá se volat víckrát s výsledky doplňkových výsledků. Hostitel používá bez ohledu na to, jaká možnost nastaví hodnotu jako poslední na daném klíči.

Následující příklad vytvoří konfiguraci hostitele:

using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

class Program
{
    static async Task Main(string[] args)
    {
        using IHost host = CreateHostBuilder(args).Build();

        // Application code should start here.

        await host.RunAsync();
    }

    static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureHostConfiguration(configHost =>
            {
                configHost.SetBasePath(Directory.GetCurrentDirectory());
                configHost.AddJsonFile("hostsettings.json", optional: true);
                configHost.AddEnvironmentVariables(prefix: "PREFIX_");
                configHost.AddCommandLine(args);
            });
}

Konfigurace aplikací

Konfigurace aplikace je vytvořena voláním ConfigureAppConfiguration metody IHostBuilder . ConfigureAppConfiguration dá se volat víckrát s výsledky doplňkových výsledků. Aplikace používá možnost, která pro daný klíč nastaví hodnotu Last.

Konfigurace vytvořená nástrojem ConfigureAppConfiguration je k dispozici v HostBuilderContext.Configuration pro následné operace a jako službu z di. Konfigurace hostitele je také přidána do konfigurace aplikace.

Další informace najdete v tématu konfigurace v rozhraní .NET.

Viz také