This commit is contained in:
Shyju Krishnankutty
2026-02-12 16:28:24 -08:00
parent 310d1b8e10
commit b5e4553f05
12 changed files with 437 additions and 141 deletions
@@ -235,19 +235,18 @@ public static class ServiceCollectionExtensions
private static void RegisterTasksFromOptions(DurableTaskRegistry registry, DurableOptions durableOptions)
{
// Build registrations for all workflows including sub-workflows
// Build registrations for all workflows including discovered sub-workflows
List<WorkflowRegistrationInfo> registrations = [];
HashSet<string> registeredActivities = [];
HashSet<string> registeredOrchestrations = [];
foreach (Workflow workflow in durableOptions.Workflows.Workflows.Values.ToList())
foreach (Workflow workflow in durableOptions.Workflows.Workflows.Values)
{
BuildWorkflowRegistrationRecursive(
workflow,
durableOptions.Workflows,
registrations,
registeredActivities,
registeredOrchestrations);
string orchestrationName = WorkflowNamingHelper.ToOrchestrationFunctionName(workflow.Name!);
if (registeredOrchestrations.Add(orchestrationName))
{
registrations.Add(BuildWorkflowRegistration(workflow, registeredActivities));
}
}
IReadOnlyDictionary<string, Func<IServiceProvider, AIAgent>> agentFactories =
@@ -281,39 +280,6 @@ public static class ServiceCollectionExtensions
}
}
private static void BuildWorkflowRegistrationRecursive(
Workflow workflow,
DurableWorkflowOptions workflowOptions,
List<WorkflowRegistrationInfo> registrations,
HashSet<string> registeredActivities,
HashSet<string> registeredOrchestrations)
{
string orchestrationName = WorkflowNamingHelper.ToOrchestrationFunctionName(workflow.Name!);
if (!registeredOrchestrations.Add(orchestrationName))
{
return;
}
registrations.Add(BuildWorkflowRegistration(workflow, registeredActivities));
// Process subworkflows recursively to register them as separate orchestrations
foreach (SubworkflowBinding subworkflowBinding in workflow.ReflectExecutors()
.Select(e => e.Value)
.OfType<SubworkflowBinding>())
{
Workflow subWorkflow = subworkflowBinding.WorkflowInstance;
workflowOptions.AddWorkflow(subWorkflow);
BuildWorkflowRegistrationRecursive(
subWorkflow,
workflowOptions,
registrations,
registeredActivities,
registeredOrchestrations);
}
}
private static WorkflowRegistrationInfo BuildWorkflowRegistration(
Workflow workflow,
HashSet<string> registeredActivities)