Refactor IdentityGraphService constructor and add logging.

Replaced private fields with constructor parameters in IdentityGraphService and introduced a logger. Added logging to handle cases where activity descriptors are not found, improving debugging and maintainability.
This commit is contained in:
Sipke Schoorstra 2024-09-20 15:59:35 +02:00
parent f9f8f05670
commit 53172cded9

View file

@ -3,24 +3,13 @@ using Elsa.Workflows.Activities;
using Elsa.Workflows.Contracts;
using Elsa.Workflows.Models;
using Humanizer;
using Microsoft.Extensions.Logging;
namespace Elsa.Workflows.Services;
/// <inheritdoc />
public class IdentityGraphService : IIdentityGraphService
public class IdentityGraphService(IActivityVisitor activityVisitor, IActivityRegistryLookupService activityRegistryLookup, ILogger<IdentityGraphService> logger) : IIdentityGraphService
{
private readonly IActivityVisitor _activityVisitor;
private readonly IActivityRegistryLookupService _activityRegistryLookup;
/// <summary>
/// Constructor.
/// </summary>
public IdentityGraphService(IActivityVisitor activityVisitor, IActivityRegistryLookupService activityRegistryLookup)
{
_activityVisitor = activityVisitor;
_activityRegistryLookup = activityRegistryLookup;
}
/// <inheritdoc />
public async Task AssignIdentitiesAsync(Workflow workflow, CancellationToken cancellationToken = default)
{
@ -30,7 +19,7 @@ public class IdentityGraphService : IIdentityGraphService
/// <inheritdoc />
public async Task AssignIdentitiesAsync(IActivity root, CancellationToken cancellationToken = default)
{
var graph = await _activityVisitor.VisitAsync(root, cancellationToken);
var graph = await activityVisitor.VisitAsync(root, cancellationToken);
await AssignIdentitiesAsync(graph);
}
@ -56,7 +45,14 @@ public class IdentityGraphService : IIdentityGraphService
/// <inheritdoc />
public async Task AssignInputOutputsAsync(IActivity activity)
{
var activityDescriptor = await _activityRegistryLookup.FindAsync(activity.Type, activity.Version) ?? throw new Exception($"Activity descriptor \"{activity.Type}\" with version \"{activity.Version}\" not found");
var activityDescriptor = await activityRegistryLookup.FindAsync(activity.Type, activity.Version);
if (activityDescriptor == null!)
{
logger.LogWarning("Activity descriptor not found for activity type {ActivityType}. Skipping identity assignment", activity.Type);
return;
}
var inputDictionary = activityDescriptor.GetWrappedInputProperties(activity);
foreach (var (inputName, input) in inputDictionary)