Skip to content

Commit a3fc7a4

Browse files
Copilotsfmskywalker
andcommitted
Apply code review feedback: track manual descriptors in providersDictionary and clarify comments
- Track _manualActivityDescriptors in providersDictionary under GetType() key for consistency - Clarify comments to be more specific about GetType() provider and RegisterAsync(Type activityType) method - Avoid duplicate entries in provider list when descriptor already preserved Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
1 parent 7503118 commit a3fc7a4

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

src/modules/Elsa.Workflows.Core/Services/ActivityRegistry.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public async Task RefreshDescriptorsAsync(IEnumerable<IActivityProvider> activit
7777
var providersDictionary = new ConcurrentDictionary<Type, ICollection<ActivityDescriptor>>();
7878
var activityDescriptors = new ConcurrentDictionary<(string Type, int Version), ActivityDescriptor>();
7979

80-
// First, preserve manually registered descriptors (from GetType() provider) without logging warnings (since we're starting fresh).
80+
// First, preserve manually registered descriptors from Register/RegisterAsync(Type) calls, which are stored under the ActivityRegistry type (GetType()) as the provider key, without logging warnings (since we're starting fresh).
8181
if (_providedActivityDescriptors.TryGetValue(GetType(), out var manualDescriptors))
8282
{
8383
var preservedManualDescriptors = new List<ActivityDescriptor>();
@@ -90,10 +90,24 @@ public async Task RefreshDescriptorsAsync(IEnumerable<IActivityProvider> activit
9090
}
9191
}
9292

93-
// Also add descriptors from _manualActivityDescriptors (from RegisterAsync(Type) calls).
94-
foreach (var manualDescriptor in _manualActivityDescriptors)
93+
// Also add descriptors from _manualActivityDescriptors (from RegisterAsync(Type activityType) calls).
94+
// These should also be tracked under the GetType() provider key to keep providersDictionary consistent.
95+
if (!_manualActivityDescriptors.Count.Equals(0))
9596
{
96-
activityDescriptors[(manualDescriptor.TypeName, manualDescriptor.Version)] = manualDescriptor;
97+
if (!providersDictionary.TryGetValue(GetType(), out var manualProviderDescriptors))
98+
{
99+
manualProviderDescriptors = new List<ActivityDescriptor>();
100+
providersDictionary[GetType()] = manualProviderDescriptors;
101+
}
102+
103+
foreach (var manualDescriptor in _manualActivityDescriptors)
104+
{
105+
activityDescriptors[(manualDescriptor.TypeName, manualDescriptor.Version)] = manualDescriptor;
106+
107+
// Avoid adding duplicates to the provider list if the descriptor was already preserved.
108+
if (!manualProviderDescriptors.Contains(manualDescriptor))
109+
manualProviderDescriptors.Add(manualDescriptor);
110+
}
97111
}
98112

99113
foreach (var activityProvider in activityProviders)

0 commit comments

Comments
 (0)