From 455a6c99cc7f90ae235e1cda796bcccf3a691e07 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 17 Jul 2023 16:26:57 +0200 Subject: [PATCH] Post registration. --- .../Notifications/EmailUserNotifications.cs | 2 +- .../Squidex.Infrastructure/Plugins/IPlugin.cs | 4 ++++ .../Plugins/PluginManager.cs | 13 ++++++++++++ .../Squidex.Infrastructure.csproj | 4 ++-- .../Pipeline/Plugins/PluginExtensions.cs | 20 +++++++++++-------- backend/src/Squidex/Squidex.csproj | 12 +++++------ backend/src/Squidex/Startup.cs | 3 +++ 7 files changed, 41 insertions(+), 17 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Notifications/EmailUserNotifications.cs b/backend/src/Squidex.Domain.Apps.Entities/Notifications/EmailUserNotifications.cs index 2b1780eca..932625dd0 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Notifications/EmailUserNotifications.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Notifications/EmailUserNotifications.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Globalization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Squidex.Domain.Apps.Core; @@ -14,7 +15,6 @@ using Squidex.Infrastructure; using Squidex.Infrastructure.Email; using Squidex.Shared.Identity; using Squidex.Shared.Users; -using System.Globalization; namespace Squidex.Domain.Apps.Entities.Notifications; diff --git a/backend/src/Squidex.Infrastructure/Plugins/IPlugin.cs b/backend/src/Squidex.Infrastructure/Plugins/IPlugin.cs index acf389357..e3587f27b 100644 --- a/backend/src/Squidex.Infrastructure/Plugins/IPlugin.cs +++ b/backend/src/Squidex.Infrastructure/Plugins/IPlugin.cs @@ -13,4 +13,8 @@ namespace Squidex.Infrastructure.Plugins; public interface IPlugin { void ConfigureServices(IServiceCollection services, IConfiguration config); + + void ConfigureServicesPost(IServiceCollection services, IConfiguration config) + { + } } diff --git a/backend/src/Squidex.Infrastructure/Plugins/PluginManager.cs b/backend/src/Squidex.Infrastructure/Plugins/PluginManager.cs index 758f7041b..35d64e13b 100644 --- a/backend/src/Squidex.Infrastructure/Plugins/PluginManager.cs +++ b/backend/src/Squidex.Infrastructure/Plugins/PluginManager.cs @@ -19,6 +19,8 @@ public sealed class PluginManager : DisposableObjectBase private readonly HashSet loadedPlugins = new HashSet(); private readonly List<(string Plugin, string Action, Exception Exception)> exceptions = new List<(string, string, Exception)>(); + public static readonly PluginManager Instance = new PluginManager(); + protected override void DisposeObject(bool disposing) { if (disposing) @@ -102,6 +104,17 @@ public sealed class PluginManager : DisposableObjectBase } } + public void ConfigureServicesPost(IServiceCollection services, IConfiguration config) + { + Guard.NotNull(services); + Guard.NotNull(config); + + foreach (var plugin in loadedPlugins) + { + plugin.ConfigureServicesPost(services, config); + } + } + public void Log(ISemanticLog log) { Guard.NotNull(log); diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index 52479a020..d5d44494d 100644 --- a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -26,9 +26,9 @@ - + - + diff --git a/backend/src/Squidex/Pipeline/Plugins/PluginExtensions.cs b/backend/src/Squidex/Pipeline/Plugins/PluginExtensions.cs index b384ee5da..50f289c56 100644 --- a/backend/src/Squidex/Pipeline/Plugins/PluginExtensions.cs +++ b/backend/src/Squidex/Pipeline/Plugins/PluginExtensions.cs @@ -31,13 +31,12 @@ public static class PluginExtensions public static IMvcBuilder AddSquidexPlugins(this IMvcBuilder mvcBuilder, IConfiguration config) { - var pluginManager = new PluginManager(); + var pluginManager = PluginManager.Instance; + var pluginOptions = config.Get(); - var options = config.Get(); - - if (options?.Plugins != null) + if (pluginOptions?.Plugins != null) { - foreach (var path in options.Plugins) + foreach (var path in pluginOptions.Plugins) { var pluginAssembly = pluginManager.Load(path, SharedAssemblies); @@ -47,15 +46,20 @@ public static class PluginExtensions pluginManager.ConfigureServices(mvcBuilder.Services, config); - mvcBuilder.Services.AddSingleton(pluginManager); - return mvcBuilder; } public static void UsePlugins(this IApplicationBuilder app) { - var pluginManager = app.ApplicationServices.GetRequiredService(); + var pluginManager = PluginManager.Instance; pluginManager.Log(app.ApplicationServices.GetRequiredService()); } + + public static void AddSquidexPluginsPost(this IServiceCollection services, IConfiguration config) + { + var pluginManager = PluginManager.Instance; + + pluginManager.ConfigureServicesPost(services, config); + } } diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj index 77d7a4d77..7f8d676f7 100644 --- a/backend/src/Squidex/Squidex.csproj +++ b/backend/src/Squidex/Squidex.csproj @@ -62,17 +62,17 @@ - - - + + + - + - + - + diff --git a/backend/src/Squidex/Startup.cs b/backend/src/Squidex/Startup.cs index eab60729b..63a5e8f95 100644 --- a/backend/src/Squidex/Startup.cs +++ b/backend/src/Squidex/Startup.cs @@ -71,6 +71,9 @@ public sealed class Startup services.AddSquidexTelemetry(config); services.AddSquidexTranslation(config); services.AddSquidexUsageTracking(config); + + // Run last to override and wrap existing services. + services.AddSquidexPluginsPost(config); } public void Configure(IApplicationBuilder app)