Claude-skill-registry configuring-avalonia-dependency-injection
Configures GenericHost and Dependency Injection in AvaloniaUI applications. Use when setting up DI container, registering services, or implementing IoC patterns in AvaloniaUI projects.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/configuring-avalonia-dependency-injection" ~/.claude/skills/majiayu000-claude-skill-registry-configuring-avalonia-dependency-injection && rm -rf "$T"
manifest:
skills/data/configuring-avalonia-dependency-injection/SKILL.mdsource content
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:
// App.axaml.cs 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() { // Create GenericHost and register services _host = Host.CreateDefaultBuilder() .ConfigureServices((context, services) => { // Register services services.AddSingleton<IUserRepository, UserRepository>(); services.AddSingleton<IUserService, UserService>(); services.AddTransient<IDialogService, DialogService>(); // Register ViewModels services.AddTransient<MainViewModel>(); // Register Views services.AddSingleton<MainWindow>(); }) .Build(); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { desktop.MainWindow = _host.Services.GetRequiredService<MainWindow>(); } base.OnFrameworkInitializationCompleted(); } }