From 154ea2b7f2545a8c92052d6dcd75f09d6323925a Mon Sep 17 00:00:00 2001 From: jackfiled Date: Thu, 25 Jan 2024 15:55:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=94=AF=E6=8C=81=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=A4=9A=E4=B8=AAWebApplicationBuilder=E5=92=8CWebApp?= =?UTF-8?q?lication=E9=85=8D=E7=BD=AE=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Builder/BlogApplicationBuilder.cs | 5 +++++ .../BlogApplicationBuilderExtension.cs | 15 +++++++++++---- .../Extensions/BlogApplicationExtension.cs | 3 ++- .../Services/WebApplicationHostedService.cs | 19 +++++++++++++------ .../BlogApplicationBuilderExtensions.cs | 3 ++- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/YaeBlog.Core/Builder/BlogApplicationBuilder.cs b/YaeBlog.Core/Builder/BlogApplicationBuilder.cs index 0d358ab..268c311 100644 --- a/YaeBlog.Core/Builder/BlogApplicationBuilder.cs +++ b/YaeBlog.Core/Builder/BlogApplicationBuilder.cs @@ -1,4 +1,5 @@ using Markdig; +using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.Metrics; @@ -13,6 +14,10 @@ public sealed class BlogApplicationBuilder : IHostApplicationBuilder { private readonly HostApplicationBuilder _hostApplicationBuilder; + internal List> WebApplicationBuilderConfigurations { get; } = []; + + internal List> WebApplicationConfigurations { get; } = []; + public MarkdownPipelineBuilder MarkdigPipelineBuilder { get; } public DeserializerBuilder YamlDeserializerBuilder { get; } diff --git a/YaeBlog.Core/Extensions/BlogApplicationBuilderExtension.cs b/YaeBlog.Core/Extensions/BlogApplicationBuilderExtension.cs index 84d2ed4..0fd99e3 100644 --- a/YaeBlog.Core/Extensions/BlogApplicationBuilderExtension.cs +++ b/YaeBlog.Core/Extensions/BlogApplicationBuilderExtension.cs @@ -34,14 +34,21 @@ public static class BlogApplicationBuilderExtension builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + + builder.Services.AddHostedService((provider) + => new WebApplicationHostedService(builder.WebApplicationBuilderConfigurations, + builder.WebApplicationConfigurations, provider)); + } + + public static void ConfigureWebApplicationBuilder(this BlogApplicationBuilder builder, + Action configureWebApplicationBuilder) + { + builder.WebApplicationBuilderConfigurations.Add(configureWebApplicationBuilder); } public static void ConfigureWebApplication(this BlogApplicationBuilder builder, - Action configureWebApplicationBuilder, Action configureWebApplication) { - builder.Services.AddHostedService(provider => - new WebApplicationHostedService(configureWebApplicationBuilder, - configureWebApplication, provider)); + builder.WebApplicationConfigurations.Add(configureWebApplication); } } diff --git a/YaeBlog.Core/Extensions/BlogApplicationExtension.cs b/YaeBlog.Core/Extensions/BlogApplicationExtension.cs index 18e99ac..31a0626 100644 --- a/YaeBlog.Core/Extensions/BlogApplicationExtension.cs +++ b/YaeBlog.Core/Extensions/BlogApplicationExtension.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using YaeBlog.Core.Abstractions; using YaeBlog.Core.Builder; +using YaeBlog.Core.Processors; using YaeBlog.Core.Services; namespace YaeBlog.Core.Extensions; @@ -9,7 +10,7 @@ public static class BlogApplicationExtension { internal static void ConfigureDefaultBlogApplication(this BlogApplication application) { - + //application.UsePostRenderProcessor(); } public static void UsePreRenderProcessor(this BlogApplication application) diff --git a/YaeBlog.Core/Services/WebApplicationHostedService.cs b/YaeBlog.Core/Services/WebApplicationHostedService.cs index 9293246..77ce006 100644 --- a/YaeBlog.Core/Services/WebApplicationHostedService.cs +++ b/YaeBlog.Core/Services/WebApplicationHostedService.cs @@ -10,16 +10,20 @@ public class WebApplicationHostedService : IHostedService { private readonly WebApplicationBuilder _websiteBuilder = WebApplication.CreateBuilder(); - private readonly Action _configureWebApplication; + private readonly List> _webApplicationConfigurations; private Website? _currentWebsite; - public WebApplicationHostedService(Action configureWebApplicationBuilder, - Action configureWebApplication, + public WebApplicationHostedService(List> webApplicationBuilderConfigurations, + List> webApplicationConfigurations, IServiceProvider hostServiceProvider) { - _configureWebApplication = configureWebApplication; - configureWebApplicationBuilder(_websiteBuilder); + _webApplicationConfigurations = webApplicationConfigurations; + foreach (Action configure in webApplicationBuilderConfigurations) + { + configure(_websiteBuilder); + } + AddHostServices(hostServiceProvider); } @@ -31,7 +35,10 @@ public class WebApplicationHostedService : IHostedService } WebApplication application = _websiteBuilder.Build(); - _configureWebApplication(application); + foreach (Action configure in _webApplicationConfigurations) + { + configure(application); + } IHostLifetime websiteLifetime = application.Services.GetRequiredService(); _currentWebsite = new Website(application, websiteLifetime); } diff --git a/YaeBlog.Theme.FluentUI/BlogApplicationBuilderExtensions.cs b/YaeBlog.Theme.FluentUI/BlogApplicationBuilderExtensions.cs index 6f2d378..476fd1e 100644 --- a/YaeBlog.Theme.FluentUI/BlogApplicationBuilderExtensions.cs +++ b/YaeBlog.Theme.FluentUI/BlogApplicationBuilderExtensions.cs @@ -10,7 +10,8 @@ public static class BlogApplicationBuilderExtensions { public static void UseFluentTheme(this BlogApplicationBuilder builder) { - builder.ConfigureWebApplication(ConfigureWebApplicationBuilder, ConfigureWebApplication); + builder.ConfigureWebApplicationBuilder(ConfigureWebApplicationBuilder); + builder.ConfigureWebApplication(ConfigureWebApplication); } private static void ConfigureWebApplicationBuilder(WebApplicationBuilder builder)