using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using NeonSprawl.Server.Game.Skills; namespace NeonSprawl.Server.Game.Factions; /// DI registration for the fail-fast faction catalog (NEO-134). public static class FactionCatalogServiceCollectionExtensions { /// Binds and registers and as singletons. public static IServiceCollection AddFactionDefinitionCatalog(this IServiceCollection services, IConfiguration configuration) { services.AddOptions() .Bind(configuration.GetSection(ContentPathsOptions.SectionName)); services.AddSingleton(sp => { var hostEnv = sp.GetRequiredService(); var opts = sp.GetRequiredService>().Value; var logger = sp.GetRequiredService() .CreateLogger("NeonSprawl.Server.Game.Factions.FactionCatalog"); var factionsDir = FactionCatalogPathResolution.ResolveFactionsDirectory( opts.FactionsDirectory, hostEnv.ContentRootPath); var schemaPath = FactionCatalogPathResolution.ResolveFactionDefSchemaPath( factionsDir, opts.FactionDefSchemaPath, hostEnv.ContentRootPath); return FactionDefinitionCatalogLoader.Load(factionsDir, schemaPath, logger); }); services.AddSingleton(sp => new FactionDefinitionRegistry(sp.GetRequiredService())); return services; } }