| name | configuring-avalonia-dependency-injection |
| description | Configures GenericHost and Dependency Injection in AvaloniaUI applications. Use when setting up DI container, registering services, or implementing IoC patterns in AvaloniaUI projects. |
6.6 Dependency Injection and GenericHost Usage
Apply the same GenericHost pattern in AvaloniaUI as in WPF
Project Structure
The templates folder contains a .NET 9 AvaloniaUI project example.
templates/
โโโ AvaloniaDISample.App/ โ Avalonia Application Project
โ โโโ Views/
โ โ โโโ MainWindow.axaml
โ โ โโโ MainWindow.axaml.cs
โ โโโ App.axaml
โ โโโ App.axaml.cs
โ โโโ Program.cs
โ โโโ GlobalUsings.cs
โ โโโ AvaloniaDISample.App.csproj
โโโ AvaloniaDISample.ViewModels/ โ ViewModel Class Library (UI framework independent)
โโโ MainViewModel.cs
โโโ GlobalUsings.cs
โโโ AvaloniaDISample.ViewModels.csproj
App.axaml.cs Example:
namespace MyApp;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public partial class App : Application
{
private IHost? _host;
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
_host = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) =>
{
services.AddSingleton<IUserRepository, UserRepository>();
services.AddSingleton<IUserService, UserService>();
services.AddTransient<IDialogService, DialogService>();
services.AddTransient<MainViewModel>();
services.AddSingleton<MainWindow>();
})
.Build();
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = _host.Services.GetRequiredService<MainWindow>();
}
base.OnFrameworkInitializationCompleted();
}
}