using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using StellaOps.Scanner.Analyzers.Native; using StellaOps.Tools.GoldenPairs.Schema; namespace StellaOps.Tools.GoldenPairs.Services; public static class GoldenPairsServiceFactory { public static ServiceProvider Build( string datasetRoot, string metadataSchemaPath, string indexSchemaPath) { var services = new ServiceCollection(); services.AddLogging(builder => { builder.AddSimpleConsole(options => { options.SingleLine = true; options.TimestampFormat = "HH:mm:ss "; }); builder.SetMinimumLevel(LogLevel.Information); }); services.AddHttpClient("golden-pairs-mirror"); var layout = new GoldenPairLayout(datasetRoot); services.AddSingleton(layout); var schemaProvider = new GoldenPairsSchemaProvider(metadataSchemaPath, indexSchemaPath); services.AddSingleton(schemaProvider); services.AddSingleton(sp => { var timeProvider = sp.GetRequiredService(); var options = Options.Create(new ElfSectionHashOptions()); return new ElfSectionHashExtractor(timeProvider, options); }); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(TimeProvider.System); services.AddSingleton(); services.AddSingleton(); return services.BuildServiceProvider(); } }