using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; namespace NeonSprawl.Server.Game.Skills; /// DI registration for the fail-fast skill catalog (NEO-34). public static class SkillCatalogServiceCollectionExtensions { /// Binds and registers as a singleton. public static IServiceCollection AddSkillDefinitionCatalog(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.Skills.SkillCatalog"); var skillsDir = SkillCatalogPathResolution.ResolveSkillsDirectory(opts.SkillsDirectory, hostEnv.ContentRootPath); var schemaPath = SkillCatalogPathResolution.ResolveSkillDefSchemaPath( skillsDir, opts.SkillDefSchemaPath, hostEnv.ContentRootPath); return SkillDefinitionCatalogLoader.Load(skillsDir, schemaPath, logger); }); return services; } }