From db82b1e16391c0966c9dcee2bb873fbb02d5f4b7 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 20 Sep 2021 21:25:58 +0200 Subject: [PATCH] Fix Webhooks persistence provider registration --- .../Extensions/WebhookOptionsBuilderExtensions.cs | 12 +++++------- .../WebhookOptionsBuilder.cs | 15 ++------------- .../EntityFrameworkWebhookStartupBase.cs | 4 +--- .../DbContextOptionsBuilderExtensions.cs | 10 +++++++--- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/activities/webhooks/Elsa.Activities.Webhooks/Extensions/WebhookOptionsBuilderExtensions.cs b/src/activities/webhooks/Elsa.Activities.Webhooks/Extensions/WebhookOptionsBuilderExtensions.cs index 5a28365af..ea0581671 100644 --- a/src/activities/webhooks/Elsa.Activities.Webhooks/Extensions/WebhookOptionsBuilderExtensions.cs +++ b/src/activities/webhooks/Elsa.Activities.Webhooks/Extensions/WebhookOptionsBuilderExtensions.cs @@ -18,15 +18,13 @@ namespace Elsa.Activities.Webhooks.Extensions var services = elsaOptions.Services; var optionsBuilder = new WebhookOptionsBuilder(services); - - services.Configure(webhookOptions => - { - configureOptions?.Invoke(optionsBuilder); - optionsBuilder.ApplyTo(webhookOptions); - }); + configureOptions?.Invoke(optionsBuilder); + var options = optionsBuilder.WebhookOptions; + + services.AddSingleton(options); services - .AddScoped(sp => sp.GetRequiredService>().Value.WebhookDefinitionStoreFactory(sp)) + .AddScoped(sp => sp.GetRequiredService().WebhookDefinitionStoreFactory(sp)) .AddActivityTypeProvider() .AddBookmarkProvider() .AddNotificationHandlersFrom(); diff --git a/src/activities/webhooks/Elsa.Activities.Webhooks/WebhookOptionsBuilder.cs b/src/activities/webhooks/Elsa.Activities.Webhooks/WebhookOptionsBuilder.cs index cf5e49549..ebd8bc863 100644 --- a/src/activities/webhooks/Elsa.Activities.Webhooks/WebhookOptionsBuilder.cs +++ b/src/activities/webhooks/Elsa.Activities.Webhooks/WebhookOptionsBuilder.cs @@ -1,6 +1,5 @@ using System; using Elsa.Activities.Webhooks.Options; -using Elsa.Caching; using Elsa.Webhooks.Persistence; using Microsoft.Extensions.DependencyInjection; @@ -8,17 +7,12 @@ namespace Elsa.Activities.Webhooks { public class WebhookOptionsBuilder { - public WebhookOptionsBuilder(IServiceCollection services) : this(services, new WebhookOptions()) - { - } - - public WebhookOptionsBuilder(IServiceCollection services, WebhookOptions webhookOptions) + public WebhookOptionsBuilder(IServiceCollection services) { Services = services; - WebhookOptions = webhookOptions; } - public WebhookOptions WebhookOptions { get; } + public WebhookOptions WebhookOptions { get; } = new(); public IServiceCollection Services { get; } public WebhookOptionsBuilder UseWebhookDefinitionStore(Func factory) @@ -26,10 +20,5 @@ namespace Elsa.Activities.Webhooks WebhookOptions.WebhookDefinitionStoreFactory = factory; return this; } - - public void ApplyTo(WebhookOptions webhookOptions) - { - webhookOptions.WebhookDefinitionStoreFactory = WebhookOptions.WebhookDefinitionStoreFactory; - } } } \ No newline at end of file diff --git a/src/activities/webhooks/Elsa.Webhooks.Persistence.EntityFramework.Core/EntityFrameworkWebhookStartupBase.cs b/src/activities/webhooks/Elsa.Webhooks.Persistence.EntityFramework.Core/EntityFrameworkWebhookStartupBase.cs index c92f48f49..8b1a4ee90 100644 --- a/src/activities/webhooks/Elsa.Webhooks.Persistence.EntityFramework.Core/EntityFrameworkWebhookStartupBase.cs +++ b/src/activities/webhooks/Elsa.Webhooks.Persistence.EntityFramework.Core/EntityFrameworkWebhookStartupBase.cs @@ -1,6 +1,5 @@ using System; using Elsa.Activities.Webhooks; -using Elsa.Activities.Webhooks.Options; using Elsa.Options; using Elsa.Services.Startup; using Elsa.Webhooks.Persistence.EntityFramework.Core.Extensions; @@ -31,8 +30,7 @@ namespace Elsa.Webhooks.Persistence.EntityFramework.Core var optionsBuilder = new WebhookOptionsBuilder(elsa.Services); optionsBuilder.UseEntityFrameworkPersistence(ef => Configure(ef, connectionString)); - - elsa.Services.Configure(options => optionsBuilder.ApplyTo(options)); + elsa.Services.AddSingleton(optionsBuilder.WebhookOptions); } protected virtual string GetDefaultConnectionString() => throw new Exception($"No connection string specified for the {ProviderName} provider"); diff --git a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.SqlServer/DbContextOptionsBuilderExtensions.cs b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.SqlServer/DbContextOptionsBuilderExtensions.cs index d347650a0..14efc5ef2 100644 --- a/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.SqlServer/DbContextOptionsBuilderExtensions.cs +++ b/src/persistence/Elsa.Persistence.EntityFramework/Elsa.Persistence.EntityFramework.SqlServer/DbContextOptionsBuilderExtensions.cs @@ -1,3 +1,4 @@ +using System; using Elsa.Persistence.EntityFramework.Core; using Microsoft.EntityFrameworkCore; @@ -8,9 +9,12 @@ namespace Elsa.Persistence.EntityFramework.SqlServer /// /// Configures the context to use SqlServer. /// - public static DbContextOptionsBuilder UseSqlServer(this DbContextOptionsBuilder builder, string connectionString) => - builder.UseSqlServer(connectionString, db => db - .MigrationsAssembly(typeof(SqlServerElsaContextFactory).Assembly.GetName().Name) + public static DbContextOptionsBuilder UseSqlServer(this DbContextOptionsBuilder builder, string connectionString, Type? migrationsAssemblyMarker = default) + { + migrationsAssemblyMarker ??= typeof(SqlServerElsaContextFactory); + return builder.UseSqlServer(connectionString, db => db + .MigrationsAssembly(migrationsAssemblyMarker.Assembly.GetName().Name) .MigrationsHistoryTable(ElsaContext.MigrationsHistoryTable, ElsaContext.ElsaSchema)); + } } } \ No newline at end of file