Made ActivityRegistryUpdateService provider specific
This commit is contained in:
parent
90d9561e76
commit
c0ee30be5f
|
|
@ -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.
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService activityRegistryUpdateService) :
|
||||
public class WorkflowDefinitionEventsConsumer(IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater) :
|
||||
IConsumer<WorkflowDefinitionCreated>,
|
||||
IConsumer<WorkflowDefinitionDeleted>,
|
||||
IConsumer<WorkflowDefinitionPublished>,
|
||||
|
|
@ -29,7 +28,7 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
/// <inheritdoc />
|
||||
public Task Consume(ConsumeContext<WorkflowDefinitionDeleted> context)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(context.Message.Id);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
|
@ -42,7 +41,7 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
/// <inheritdoc />
|
||||
public Task Consume(ConsumeContext<WorkflowDefinitionRetracted> context)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(context.Message.Id);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +50,7 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
{
|
||||
foreach (var id in context.Message.Ids)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(id);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -60,7 +59,7 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
/// <inheritdoc />
|
||||
public Task Consume(ConsumeContext<WorkflowDefinitionVersionDeleted> context)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), context.Message.Id);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(context.Message.Id);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
|
@ -69,7 +68,7 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
{
|
||||
foreach (var id in context.Message.Ids)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -87,9 +86,9 @@ public class WorkflowDefinitionEventsConsumer(IActivityRegistryUpdateService act
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
namespace Elsa.Workflows.Contracts;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a service for updating the activity registry.
|
||||
/// </summary>
|
||||
public interface IActivityRegistryUpdateService
|
||||
{
|
||||
/// <summary>
|
||||
/// Tries to add a workflow as an activity to the registry.
|
||||
/// </summary>
|
||||
/// <param name="providerType">The type of the activity provider.</param>
|
||||
/// <param name="workflowDefinitionId">The ID of the workflow definition.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
Task AddToRegistry(Type providerType, string workflowDefinitionId, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Removes workflow definition activities from the <see cref="IActivityRegistry"/>.
|
||||
/// </summary>
|
||||
/// <param name="providerType">The type of the Activity Provider.</param>
|
||||
/// <param name="workflowDefinitionId">The ID of the workflow definition to remove.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
void RemoveDefinitionFromRegistry(Type providerType, string workflowDefinitionId, CancellationToken cancellationToken = default);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Removes a workflow definition version activity from the <see cref="IActivityRegistry"/>.
|
||||
/// </summary>
|
||||
/// <param name="providerType">The type of the Activity Provider.</param>
|
||||
/// <param name="workflowDefinitionVersionId">The ID of the workflow definition to remove.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
void RemoveDefinitionVersionFromRegistry(Type providerType, string workflowDefinitionVersionId, CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
|
@ -137,7 +137,6 @@ public class WorkflowsFeature : FeatureBase
|
|||
.AddSingleton<IActivityDescriber, ActivityDescriber>()
|
||||
.AddSingleton<IActivityRegistry, ActivityRegistry>()
|
||||
.AddScoped<IActivityRegistryLookupService, ActivityRegistryLookupService>()
|
||||
.AddScoped<IActivityRegistryUpdateService, ActivityRegistryUpdateService>()
|
||||
.AddSingleton<IPropertyDefaultValueResolver, PropertyDefaultValueResolver>()
|
||||
.AddSingleton<IPropertyUIHandlerResolver, PropertyUIHandlerResolver>()
|
||||
.AddSingleton<IActivityFactory, ActivityFactory>()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
namespace Elsa.Workflows.Management.Contracts;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a service for updating the activity registry.
|
||||
/// </summary>
|
||||
public interface IWorkflowDefinitionActivityRegistryUpdater
|
||||
{
|
||||
/// <summary>
|
||||
/// Tries to add a workflow as an activity to the registry.
|
||||
/// </summary>
|
||||
/// <param name="workflowDefinitionId">The ID of the workflow definition.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
Task AddToRegistry(string workflowDefinitionId, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Removes workflow definition activities from the <see cref="Elsa.Workflows.Contracts.IActivityRegistry"/>.
|
||||
/// </summary>
|
||||
/// <param name="workflowDefinitionId">The ID of the workflow definition to remove.</param>
|
||||
void RemoveDefinitionFromRegistry(string workflowDefinitionId);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Removes a workflow definition version activity from the <see cref="Elsa.Workflows.Contracts.IActivityRegistry"/>.
|
||||
/// </summary>
|
||||
/// <param name="workflowDefinitionVersionId">The ID of the workflow definition to remove.</param>
|
||||
void RemoveDefinitionVersionFromRegistry(string workflowDefinitionVersionId);
|
||||
}
|
||||
|
|
@ -201,6 +201,9 @@ public class WorkflowManagementFeature : FeatureBase
|
|||
.AddMemoryStore<WorkflowDefinition, MemoryWorkflowDefinitionStore>()
|
||||
.AddMemoryStore<WorkflowInstance, MemoryWorkflowInstanceStore>()
|
||||
.AddActivityProvider<TypedActivityProvider>()
|
||||
.AddActivityProvider<WorkflowDefinitionActivityProvider>()
|
||||
.AddScoped<WorkflowDefinitionActivityProvider>()
|
||||
.AddScoped<IWorkflowDefinitionActivityRegistryUpdater, WorkflowDefinitionActivityRegistryUpdater>()
|
||||
.AddScoped<IWorkflowDefinitionService, WorkflowDefinitionService>()
|
||||
.AddScoped<IWorkflowSerializer, WorkflowSerializer>()
|
||||
.AddScoped<IWorkflowValidator, WorkflowValidator>()
|
||||
|
|
@ -216,7 +219,6 @@ public class WorkflowManagementFeature : FeatureBase
|
|||
.AddScoped<IWorkflowMaterializer, ClrWorkflowMaterializer>()
|
||||
.AddScoped<IWorkflowMaterializer, JsonWorkflowMaterializer>()
|
||||
.AddScoped<IActivityResolver, WorkflowDefinitionActivityResolver>()
|
||||
.AddActivityProvider<WorkflowDefinitionActivityProvider>()
|
||||
.AddScoped<WorkflowDefinitionMapper>()
|
||||
.AddSingleton<VariableDefinitionMapper>()
|
||||
.AddSingleton<WorkflowStateMapper>()
|
||||
|
|
|
|||
|
|
@ -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 <see cref="IActivityRegistry"/> for the <see cref="WorkflowDefinitionActivityProvider"/> provider whenever an <see cref="WorkflowDefinition"/> is published, retracted or deleted.
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
public class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegistryUpdateService) :
|
||||
public class RefreshActivityRegistry(IWorkflowDefinitionActivityRegistryUpdater workflowDefinitionActivityRegistryUpdater) :
|
||||
INotificationHandler<WorkflowDefinitionPublished>,
|
||||
INotificationHandler<WorkflowDefinitionRetracted>,
|
||||
INotificationHandler<WorkflowDefinitionDeleted>,
|
||||
|
|
@ -30,14 +31,14 @@ public class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegi
|
|||
/// <inheritdoc />
|
||||
public Task HandleAsync(WorkflowDefinitionRetracted notification, CancellationToken cancellationToken)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), notification.WorkflowDefinition.Id, cancellationToken);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(notification.WorkflowDefinition.Id);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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 class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegi
|
|||
{
|
||||
foreach (string id in notification.DefinitionIds)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id, cancellationToken);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionFromRegistry(id);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -61,7 +62,7 @@ public class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegi
|
|||
/// <inheritdoc />
|
||||
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 class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegi
|
|||
{
|
||||
foreach (string id in notification.Ids)
|
||||
{
|
||||
activityRegistryUpdateService.RemoveDefinitionVersionFromRegistry(typeof(WorkflowDefinitionActivityProvider), id, cancellationToken);
|
||||
workflowDefinitionActivityRegistryUpdater.RemoveDefinitionVersionFromRegistry(id);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -88,9 +89,9 @@ public class RefreshActivityRegistry(IActivityRegistryUpdateService activityRegi
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// Service responsible for updating the activity registry based on activity providers.
|
||||
/// </summary>
|
||||
public class ActivityRegistryUpdateService(IEnumerable<IActivityProvider> providers, IActivityRegistry registry) : IActivityRegistryUpdateService
|
||||
public class WorkflowDefinitionActivityRegistryUpdater(WorkflowDefinitionActivityProvider provider, IActivityRegistry registry) : IWorkflowDefinitionActivityRegistryUpdater
|
||||
{
|
||||
private readonly Type _providerType = typeof(WorkflowDefinitionActivityProvider);
|
||||
|
||||
/// <inheritdoc />
|
||||
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 class ActivityRegistryUpdateService(IEnumerable<IActivityProvider> provid
|
|||
val.ToString() == workflowDefinitionVersionId);
|
||||
|
||||
if (descriptorToAdd is not null)
|
||||
registry.Add(providerType, descriptorToAdd);
|
||||
registry.Add(_providerType, descriptorToAdd);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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 class ActivityRegistryUpdateService(IEnumerable<IActivityProvider> provid
|
|||
|
||||
foreach (ActivityDescriptor activityDescriptor in descriptorsToRemove)
|
||||
{
|
||||
registry.Remove(providerType, activityDescriptor);
|
||||
registry.Remove(_providerType, activityDescriptor);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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 class ActivityRegistryUpdateService(IEnumerable<IActivityProvider> provid
|
|||
val.ToString() == workflowDefinitionVersionId);
|
||||
|
||||
if (descriptorToRemove is not null)
|
||||
registry.Remove(providerType, descriptorToRemove);
|
||||
registry.Remove(_providerType, descriptorToRemove);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue