diff --git a/src/modules/Elsa.MassTransit/Consumers/WorkflowDefinitionEventsConsumer.cs b/src/modules/Elsa.MassTransit/Consumers/WorkflowDefinitionEventsConsumer.cs index 21ce269468..0b5fd79ed2 100644 --- a/src/modules/Elsa.MassTransit/Consumers/WorkflowDefinitionEventsConsumer.cs +++ b/src/modules/Elsa.MassTransit/Consumers/WorkflowDefinitionEventsConsumer.cs @@ -1,6 +1,5 @@ using Elsa.MassTransit.Messages; -using Elsa.Workflows.Contracts; -using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity; +using Elsa.Workflows.Management.Contracts; using JetBrains.Annotations; using MassTransit; @@ -10,7 +9,7 @@ namespace Elsa.MassTransit.Consumers; /// Consumes messages related to workflow definition changes. /// [PublicAPI] -public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService activityRegistryUpdateService) : +public class WorkflowDefinitionEventsConsumer(IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater) : IConsumer, IConsumer, IConsumer, @@ -29,7 +28,7 @@ public Task Consume(ConsumeContext context) /// public Task Consume(ConsumeContext context) { - activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(context.Message.Id); return Task.CompletedTask; } @@ -42,7 +41,7 @@ public Task Consume(ConsumeContext context) /// public Task Consume(ConsumeContext context) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(context.Message.Id); return Task.CompletedTask; } @@ -51,7 +50,7 @@ public Task Consume(ConsumeContext context) { foreach (var id in context.Message.Ids) { - activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(id); } return Task.CompletedTask; @@ -60,7 +59,7 @@ public Task Consume(ConsumeContext context) /// public Task Consume(ConsumeContext context) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(context.Message.Id); return Task.CompletedTask; } @@ -69,7 +68,7 @@ public Task Consume(ConsumeContext context) { foreach (var id in context.Message.Ids) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id); } return Task.CompletedTask; @@ -87,9 +86,9 @@ public async Task Consume(ConsumeContext cont private Task UpdateDefinition(string id, bool usableAsActivity) { if (usableAsActivity) - return activityRegistryUpdateService.AddToRegistry(typeof(WorkflowDefinitionActivityProvider), id); + return workflowDefinitionActivityRegistryUpdater.AddToRegistry(id); - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id); return Task.CompletedTask; } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Contracts/IActivityRegistryUpdateService.cs b/src/modules/Elsa.Workflows.Core/Contracts/IActivityRegistryUpdateService.cs deleted file mode 100644 index 918be65653..0000000000 --- a/src/modules/Elsa.Workflows.Core/Contracts/IActivityRegistryUpdateService.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace Elsa.Workflows.Contracts; - -/// -/// Represents a service for updating the activity registry. -/// -public interface IActivityRegistryUpdateService -{ - /// - /// Tries to add a workflow as an activity to the registry. - /// - /// The type of the activity provider. - /// The ID of the workflow definition. - /// The cancellation token. - Task AddToRegistry(Type providerType, string workflowDefinitionId, CancellationToken cancellationToken = default); - - /// - /// Removes workflow definition activities from the . - /// - /// The type of the Activity Provider. - /// The ID of the workflow definition to remove. - /// The cancellation token. - void RemoveDefinitionFromRegistry(Type providerType, string workflowDefinitionId, CancellationToken cancellationToken = default); - - - /// - /// Removes a workflow definition version activity from the . - /// - /// The type of the Activity Provider. - /// The ID of the workflow definition to remove. - /// The cancellation token. - void RemoveDefinitionVersionFromRegistry(Type providerType, string workflowDefinitionVersionId, CancellationToken cancellationToken = default); -} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Features/WorkflowsFeature.cs b/src/modules/Elsa.Workflows.Core/Features/WorkflowsFeature.cs index 355b0e0df0..2b8f369313 100644 --- a/src/modules/Elsa.Workflows.Core/Features/WorkflowsFeature.cs +++ b/src/modules/Elsa.Workflows.Core/Features/WorkflowsFeature.cs @@ -137,7 +137,6 @@ private void AddElsaCore(IServiceCollection services) .AddSingleton() .AddSingleton() .AddScoped() - .AddScoped() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowDefinitionActivityRegistryUpdater.cs b/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowDefinitionActivityRegistryUpdater.cs new file mode 100644 index 0000000000..454ac3dbe8 --- /dev/null +++ b/src/modules/Elsa.Workflows.Management/Contracts/IWorkflowDefinitionActivityRegistryUpdater.cs @@ -0,0 +1,27 @@ +namespace Elsa.Workflows.Management.Contracts; + +/// +/// Represents a service for updating the activity registry. +/// +public interface IWorkflowDefinitionActivityRegistryUpdater +{ + /// + /// Tries to add a workflow as an activity to the registry. + /// + /// The ID of the workflow definition. + /// The cancellation token. + Task AddToRegistry(string workflowDefinitionId, CancellationToken cancellationToken = default); + + /// + /// Removes workflow definition activities from the . + /// + /// The ID of the workflow definition to remove. + void RemoveDefinitionFromRegistry(string workflowDefinitionId); + + + /// + /// Removes a workflow definition version activity from the . + /// + /// The ID of the workflow definition to remove. + void RemoveDefinitionVersionFromRegistry(string workflowDefinitionVersionId); +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs b/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs index 80ad1cc3be..055e37cf97 100644 --- a/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs +++ b/src/modules/Elsa.Workflows.Management/Features/WorkflowManagementFeature.cs @@ -201,6 +201,9 @@ public override void Apply() .AddMemoryStore() .AddMemoryStore() .AddActivityProvider() + .AddActivityProvider() + .AddScoped() + .AddScoped() .AddScoped() .AddScoped() .AddScoped() @@ -216,7 +219,6 @@ public override void Apply() .AddScoped() .AddScoped() .AddScoped() - .AddActivityProvider() .AddScoped() .AddSingleton() .AddSingleton() diff --git a/src/modules/Elsa.Workflows.Management/Handlers/RefreshActivityRegistry.cs b/src/modules/Elsa.Workflows.Management/Handlers/RefreshActivityRegistry.cs index c8ac9e4503..7e35887c89 100644 --- a/src/modules/Elsa.Workflows.Management/Handlers/RefreshActivityRegistry.cs +++ b/src/modules/Elsa.Workflows.Management/Handlers/RefreshActivityRegistry.cs @@ -1,6 +1,7 @@ using Elsa.Mediator.Contracts; using Elsa.Workflows.Contracts; using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity; +using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Management.Entities; using Elsa.Workflows.Management.Notifications; using JetBrains.Annotations; @@ -11,7 +12,7 @@ namespace Elsa.Workflows.Management.Handlers; /// Refreshes the for the provider whenever an is published, retracted or deleted. /// [PublicAPI] -public class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegistryUpdateService) : +public class RefreshActivityRegistry(IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater) : INotificationHandler, INotificationHandler, INotificationHandler, @@ -30,14 +31,14 @@ public Task HandleAsync(WorkflowDefinitionPublished notification, CancellationTo /// public Task HandleAsync(WorkflowDefinitionRetracted notification, CancellationToken cancellationToken) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), notification.WorkflowDefinition.Id, cancellationToken); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(notification.WorkflowDefinition.Id); return Task.CompletedTask; } /// public Task HandleAsync(WorkflowDefinitionDeleted notification, CancellationToken cancellationToken) { - activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), notification.DefinitionId, cancellationToken); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(notification.DefinitionId); return Task.CompletedTask; } @@ -46,7 +47,7 @@ public Task HandleAsync(WorkflowDefinitionsDeleted notification, CancellationTok { foreach (string id in notification.DefinitionIds) { - activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id, cancellationToken); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(id); } return Task.CompletedTask; @@ -61,7 +62,7 @@ public Task HandleAsync(WorkflowDefinitionCreated notification, CancellationToke /// public Task HandleAsync(WorkflowDefinitionVersionDeleted notification, CancellationToken cancellationToken) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), notification.WorkflowDefinition.Id, cancellationToken); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(notification.WorkflowDefinition.Id); return Task.CompletedTask; } @@ -70,7 +71,7 @@ public Task HandleAsync(WorkflowDefinitionVersionsDeleted notification, Cancella { foreach (string id in notification.Ids) { - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id, cancellationToken); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id); } return Task.CompletedTask; @@ -88,9 +89,9 @@ public async Task HandleAsync(WorkflowDefinitionVersionsUpdated notification, Ca private Task UpdateDefinition(string id, bool? usableAsActivity) { if (usableAsActivity.GetValueOrDefault()) - return activityRegistryUpdateService.AddToRegistry(typeof(WorkflowDefinitionActivityProvider), id); + return workflowDefinitionActivityRegistryUpdater.AddToRegistry(id); - activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id); + workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id); return Task.CompletedTask; } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Services/ActivityRegistryUpdateService.cs b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionActivityRegistryUpdater.cs similarity index 56% rename from src/modules/Elsa.Workflows.Core/Services/ActivityRegistryUpdateService.cs rename to src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionActivityRegistryUpdater.cs index b3bbb6cf89..dc9eb96db4 100644 --- a/src/modules/Elsa.Workflows.Core/Services/ActivityRegistryUpdateService.cs +++ b/src/modules/Elsa.Workflows.Management/Services/WorkflowDefinitionActivityRegistryUpdater.cs @@ -1,17 +1,20 @@ using Elsa.Workflows.Contracts; +using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity; +using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Models; -namespace Elsa.Workflows.Services; +namespace Elsa.Workflows.Management.Services; /// /// Service responsible for updating the activity registry based on activity providers. /// -public class ActivityRegistryUpdateService(IEnumerable providers, IActivityRegistry registry) : IActivityRegistryUpdateService +public class WorkflowDefinitionActivityRegistryUpdater(WorkflowDefinitionActivityProvider provider, IActivityRegistry registry) : IWorkflowDefinitionActivityRegistryUpdater { + private readonly Type _providerType = typeof(WorkflowDefinitionActivityProvider); + /// - public async Task AddToRegistry(Type providerType, string workflowDefinitionVersionId, CancellationToken cancellationToken = default) + public async Task AddToRegistry(string workflowDefinitionVersionId, CancellationToken cancellationToken) { - var provider = providers.First(x => x.GetType() == providerType); var descriptors = await provider.GetDescriptorsAsync(cancellationToken); var descriptorToAdd = descriptors .SingleOrDefault(d => @@ -19,13 +22,13 @@ public async Task AddToRegistry(Type providerType, string workflowDefinitionVers val.ToString() == workflowDefinitionVersionId); if (descriptorToAdd is not null) - registry.Add(providerType, descriptorToAdd); + registry.Add(_providerType, descriptorToAdd); } /// - public void RemoveDefinitionFromRegistry(Type providerType, string workflowDefinitionId, CancellationToken cancellationToken = default) + public void RemoveDefinitionFromRegistry(string workflowDefinitionId) { - var providerDescriptors = registry.ListByProvider(providerType); + var providerDescriptors = registry.ListByProvider(_providerType); var descriptorsToRemove = providerDescriptors .Where(d => @@ -34,14 +37,14 @@ public void RemoveDefinitionFromRegistry(Type providerType, string workflowDefin foreach (ActivityDescriptor activityDescriptor in descriptorsToRemove) { - registry.Remove(providerType, activityDescriptor); + registry.Remove(_providerType, activityDescriptor); } } /// - public void RemoveDefinitionVersionFromRegistry(Type providerType, string workflowDefinitionVersionId, CancellationToken cancellationToken = default) + public void RemoveDefinitionVersionFromRegistry(string workflowDefinitionVersionId) { - var providerDescriptors = registry.ListByProvider(providerType); + var providerDescriptors = registry.ListByProvider(_providerType); var descriptorToRemove = providerDescriptors .SingleOrDefault(d => @@ -49,6 +52,6 @@ public void RemoveDefinitionVersionFromRegistry(Type providerType, string workfl val.ToString() == workflowDefinitionVersionId); if (descriptorToRemove is not null) - registry.Remove(providerType, descriptorToRemove); + registry.Remove(_providerType, descriptorToRemove); } } \ No newline at end of file