.NET 6 - Hosts für jeden Zweck

.NET 6 - Hosts für jeden Zweck

13 Jan 2023 - Matthias Voigt

Mit .NET 6 bietet Microsoft eine flexible Möglichkeit, Hosts für verschiedene Anwendungstypen zu erstellen. Die Nutzung von Hosts ist nicht mehr auf ASP.NET-Anwendungen beschränkt, sondern kann auch in Konsolenanwendungen und sogar WPF-Apps verwendet werden.

ASP.NET Core

In ASP.NET Core ist die Nutzung des Hosts mittlerweile offensichtlich und gut dokumentiert. Hier wird der Host im Program.cs-Datei konfiguriert:

var builder = WebApplication.CreateBuilder(args);
// Weitere Konfigurationen...
var app = builder.Build();
app.Run();

Konsolenanwendungen

Auch in Konsolenanwendungen kann man den generischen Host verwenden, um beispielsweise Dependency Injection oder Logging zu konfigurieren:

var builder = Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHostedService<MyBackgroundService>();
    });

var host = builder.Build();
await host.RunAsync();

WPF-Anwendungen

Für WPF-Anwendungen kann ebenfalls der generische Host genutzt werden. Hier ein Beispiel, wie man den Host in einer WPF-Anwendung integrieren kann:

  1. Installiere die notwendigen NuGet-Pakete:
    • Microsoft.Extensions.Hosting
    • Microsoft.Extensions.DependencyInjection
  2. In der App.xaml.cs die OnStartup-Methode überschreiben und den Host konfigurieren:
public partial class App : Application
{
    private IHost _host;

    public App()
    {
        _host = Host.CreateDefaultBuilder()
            .ConfigureServices((context, services) =>
            {
                services.AddSingleton<MainWindow>();
                // Weitere Services hinzufügen...
            })
            .Build();
    }

    protected override async void OnStartup(StartupEventArgs e)
    {
        await _host.StartAsync();
        var mainWindow = _host.Services.GetRequiredService<MainWindow>();
        mainWindow.Show();
        base.OnStartup(e);
    }

    protected override async void OnExit(ExitEventArgs e)
    {
        await _host.StopAsync();
        _host.Dispose();
        base.OnExit(e);
    }
}

Fazit

Die Nutzung des generischen Hosts in .NET 6 bietet eine konsistente und flexible Möglichkeit, Anwendungen zu konfigurieren und zu starten. Egal ob ASP.NET Core, Konsolenanwendung oder WPF-App, der Host ermöglicht eine einheitliche Konfigurationsweise und die Nutzung von Dependency Injection, Logging und weiteren Middleware-Komponenten.