using Avalonia; using Avalonia.Media; using Microsoft.Extensions.DependencyInjection; namespace Splitter_UI; internal sealed class Program { // Initialization code. Don't use any Avalonia, third-party APIs or any // SynchronizationContext-reliant code before AppMain is called: things aren't initialized // yet and stuff might break. [STAThread] public static void Main(string[] args) { BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); } private static ServiceCollection ConfigureServices() { var services = new ServiceCollection(); var logPaveVM = new LogPaneViewModel(); // ViewModels services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(logPaveVM); services.AddSingleton(logPaveVM); // splitter services services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddKeyedSingleton("face", (x,_) => new SingleThreadedDetector(x.GetRequiredService())); services.AddKeyedSingleton("body", (x,_) => new SingleThreadedDetector(x.GetRequiredService())); services.AddKeyedSingleton("none", (x,_) => new SingleThreadedDetector(x.GetRequiredService())); services.AddSingleton(x => new SingleThreadedEmbeddingExtractor(x.GetRequiredService())); services.AddSingleton>(x => detectorName => x.GetKeyedService(detectorName) ?? new DummyDetector()); services.AddSingleton>(x => detectorName => { var detectorFactory = x.GetRequiredService>(); var extractor = x.GetRequiredService(); return new ObjectTracker(detectorFactory(detectorName), extractor); }); services.AddSingleton(); services.AddSingleton(); // Domain services (your pipeline) services.AddTransient(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); return services; } // Avalonia configuration, don't remove; also used by visual designer. public static AppBuilder BuildAvaloniaApp() { var services = ConfigureServices(); var provider = services.BuildServiceProvider(); return AppBuilder.Configure(() => new App(provider)) .UsePlatformDetect() .With(new FontManagerOptions { FontFallbacks = new[] { new FontFallback { FontFamily = new FontFamily("Font Awesome 7 Free") }, new FontFallback { FontFamily = new FontFamily("Font Awesome 7 Free Solid") } } }) #if DEBUG .WithDeveloperTools() #endif .WithInterFont() .LogToTrace(); } }