- TaskRunner: extract worktree-vs-sandbox selection into PrepareRunDirectoryAsync so RunAsync reads linearly (a small helper, not a Strategy pattern — overkill for a two-way branch). - App: drop the public static ServiceProvider locator; inject the provider via constructor through AppBuilder.Configure(() => new App(services)). Parameterless ctor + BuildAvaloniaApp() retained for the XAML designer. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using System;
|
|
using Avalonia;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Avalonia.Markup.Xaml;
|
|
using ClaudeDo.Ui.Services;
|
|
using ClaudeDo.Ui.ViewModels;
|
|
using ClaudeDo.Ui.Views;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace ClaudeDo.App;
|
|
|
|
public partial class App : Application
|
|
{
|
|
private readonly IServiceProvider? _services;
|
|
|
|
// Parameterless ctor is required by the XAML previewer / designer.
|
|
public App() { }
|
|
|
|
public App(IServiceProvider services) => _services = services;
|
|
|
|
public override void Initialize()
|
|
{
|
|
AvaloniaXamlLoader.Load(this);
|
|
}
|
|
|
|
public override void OnFrameworkInitializationCompleted()
|
|
{
|
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
{
|
|
var services = _services
|
|
?? throw new InvalidOperationException("App was constructed without a service provider.");
|
|
|
|
FocusClearing.Install();
|
|
|
|
desktop.MainWindow = new MainWindow
|
|
{
|
|
DataContext = services.GetRequiredService<IslandsShellViewModel>(),
|
|
};
|
|
|
|
// Kick off the SignalR retry loop — reconnects indefinitely if the worker
|
|
// is not up yet, or goes down and comes back.
|
|
_ = services.GetRequiredService<WorkerClient>().StartAsync();
|
|
}
|
|
|
|
base.OnFrameworkInitializationCompleted();
|
|
}
|
|
}
|