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) { var services = ConfigureServices(); var provider = services.BuildServiceProvider(); BuildAvaloniaApp(provider) .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.AddSingleton(x => new SingleThreadedDetector(x.GetRequiredService())); services.AddSingleton(x => new SingleThreadedDetector(x.GetRequiredService())); services.AddSingleton(x => new SingleThreadedDetector(x.GetRequiredService())); services.AddSingleton(x => new SingleThreadedEmbeddingExtractor(x.GetRequiredService())); services.AddSingleton>( x => detectorName => { return detectorName switch { "face" => x.GetRequiredService>(), "body" => x.GetRequiredService>(), "none" => x.GetRequiredService>(), _ => new DummyDetector() }; }); 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(ServiceProvider provider) => 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(); }