using Markdig; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using YaeBlog.Core.Builder; using YaeBlog.Core.Models; using YaeBlog.Core.Services; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; namespace YaeBlog.Core.Extensions; internal static class BlogApplicationExtension { public static BlogApplicationBuilder ConfigureBlogApplication(this BlogApplicationBuilder builder) { builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); builder.Configuration.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true); builder.Configuration.AddEnvironmentVariables(); builder.Services.Configure( builder.Configuration.GetSection(BlogOptions.OptionName)); builder.YamlDeserializerBuilder.WithNamingConvention(CamelCaseNamingConvention.Instance); builder.YamlDeserializerBuilder.IgnoreUnmatchedProperties(); builder.Services.AddSingleton( _ => builder.MarkdigPipelineBuilder.Build()); builder.Services.AddSingleton( _ => builder.YamlDeserializerBuilder.Build()); builder.Services.AddHostedService(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); return builder; } }