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.
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();
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();
Für WPF-Anwendungen kann ebenfalls der generische Host genutzt werden. Hier ein Beispiel, wie man den Host in einer WPF-Anwendung integrieren kann:
Microsoft.Extensions.Hosting
Microsoft.Extensions.DependencyInjection
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);
}
}
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.