1313
1414namespace DurableTask . Core
1515{
16+ using DurableTask . Core . Entities ;
17+ using DurableTask . Core . Exceptions ;
18+ using DurableTask . Core . Logging ;
19+ using DurableTask . Core . Middleware ;
20+ using DurableTask . Core . Settings ;
21+ using Microsoft . Extensions . Logging ;
1622 using System ;
1723 using System . Collections . Generic ;
1824 using System . Diagnostics ;
@@ -21,11 +27,6 @@ namespace DurableTask.Core
2127 using System . Runtime . CompilerServices ;
2228 using System . Threading ;
2329 using System . Threading . Tasks ;
24- using DurableTask . Core . Entities ;
25- using DurableTask . Core . Exceptions ;
26- using DurableTask . Core . Logging ;
27- using DurableTask . Core . Middleware ;
28- using Microsoft . Extensions . Logging ;
2930
3031 /// <summary>
3132 /// Allows users to load the TaskOrchestration and TaskActivity classes and start
@@ -36,6 +37,7 @@ public sealed class TaskHubWorker : IDisposable
3637 readonly INameVersionObjectManager < TaskActivity > activityManager ;
3738 readonly INameVersionObjectManager < TaskOrchestration > orchestrationManager ;
3839 readonly INameVersionObjectManager < TaskEntity > entityManager ;
40+ readonly VersioningSettings versioningSettings ;
3941
4042 readonly DispatchMiddlewarePipeline orchestrationDispatchPipeline = new DispatchMiddlewarePipeline ( ) ;
4143 readonly DispatchMiddlewarePipeline entityDispatchPipeline = new DispatchMiddlewarePipeline ( ) ;
@@ -86,6 +88,23 @@ public TaskHubWorker(IOrchestrationService orchestrationService, ILoggerFactory
8688 {
8789 }
8890
91+ /// <summary>
92+ /// Create a new TaskHubWorker with given OrchestrationService
93+ /// </summary>
94+ /// <param name="orchestrationService">Reference the orchestration service implementation</param>
95+ /// <param name="versioningSettings">The <see cref="VersioningSettings"/> that define how orchestration versions are handled</param>
96+ /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to use for logging</param>
97+ public TaskHubWorker ( IOrchestrationService orchestrationService , VersioningSettings versioningSettings , ILoggerFactory loggerFactory = null )
98+ : this (
99+ orchestrationService ,
100+ new NameVersionObjectManager < TaskOrchestration > ( ) ,
101+ new NameVersionObjectManager < TaskActivity > ( ) ,
102+ new NameVersionObjectManager < TaskEntity > ( ) ,
103+ versioningSettings ,
104+ loggerFactory )
105+ {
106+ }
107+
89108 /// <summary>
90109 /// Create a new TaskHubWorker with given OrchestrationService and name version managers
91110 /// </summary>
@@ -101,7 +120,29 @@ public TaskHubWorker(
101120 orchestrationObjectManager ,
102121 activityObjectManager ,
103122 new NameVersionObjectManager < TaskEntity > ( ) ,
104- loggerFactory : null )
123+ loggerFactory : null ,
124+ versioningSettings : null )
125+ {
126+ }
127+
128+ /// <summary>
129+ /// Create a new <see cref="TaskHubWorker"/> with given <see cref="IOrchestrationService"/> and name version managers
130+ /// </summary>
131+ /// <param name="orchestrationService">The orchestration service implementation</param>
132+ /// <param name="orchestrationObjectManager">The <see cref="INameVersionObjectManager{TaskOrchestration}"/> for orchestrations</param>
133+ /// <param name="activityObjectManager">The <see cref="INameVersionObjectManager{TaskActivity}"/> for activities</param>
134+ /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to use for logging</param>
135+ public TaskHubWorker (
136+ IOrchestrationService orchestrationService ,
137+ INameVersionObjectManager < TaskOrchestration > orchestrationObjectManager ,
138+ INameVersionObjectManager < TaskActivity > activityObjectManager ,
139+ ILoggerFactory loggerFactory = null )
140+ : this (
141+ orchestrationService ,
142+ orchestrationObjectManager ,
143+ activityObjectManager ,
144+ new NameVersionObjectManager < TaskEntity > ( ) ,
145+ loggerFactory )
105146 {
106147 }
107148
@@ -111,17 +152,20 @@ public TaskHubWorker(
111152 /// <param name="orchestrationService">The orchestration service implementation</param>
112153 /// <param name="orchestrationObjectManager">The <see cref="INameVersionObjectManager{TaskOrchestration}"/> for orchestrations</param>
113154 /// <param name="activityObjectManager">The <see cref="INameVersionObjectManager{TaskActivity}"/> for activities</param>
155+ /// <param name="versioningSettings">The <see cref="VersioningSettings"/> that define how orchestration versions are handled</param>
114156 /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to use for logging</param>
115157 public TaskHubWorker (
116158 IOrchestrationService orchestrationService ,
117159 INameVersionObjectManager < TaskOrchestration > orchestrationObjectManager ,
118160 INameVersionObjectManager < TaskActivity > activityObjectManager ,
161+ VersioningSettings versioningSettings ,
119162 ILoggerFactory loggerFactory = null )
120163 : this (
121164 orchestrationService ,
122165 orchestrationObjectManager ,
123166 activityObjectManager ,
124167 new NameVersionObjectManager < TaskEntity > ( ) ,
168+ versioningSettings ,
125169 loggerFactory )
126170 {
127171 }
@@ -140,13 +184,40 @@ public TaskHubWorker(
140184 INameVersionObjectManager < TaskActivity > activityObjectManager ,
141185 INameVersionObjectManager < TaskEntity > entityObjectManager ,
142186 ILoggerFactory loggerFactory = null )
187+ : this (
188+ orchestrationService ,
189+ orchestrationObjectManager ,
190+ activityObjectManager ,
191+ entityObjectManager ,
192+ null ,
193+ loggerFactory )
194+ {
195+ }
196+
197+ /// <summary>
198+ /// Create a new TaskHubWorker with given OrchestrationService and name version managers
199+ /// </summary>
200+ /// <param name="orchestrationService">Reference the orchestration service implementation</param>
201+ /// <param name="orchestrationObjectManager">NameVersionObjectManager for Orchestrations</param>
202+ /// <param name="activityObjectManager">NameVersionObjectManager for Activities</param>
203+ /// <param name="entityObjectManager">The NameVersionObjectManager for entities. The version is the entity key.</param>
204+ /// <param name="versioningSettings">The <see cref="VersioningSettings"/> that define how orchestration versions are handled</param>
205+ /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to use for logging</param>
206+ public TaskHubWorker (
207+ IOrchestrationService orchestrationService ,
208+ INameVersionObjectManager < TaskOrchestration > orchestrationObjectManager ,
209+ INameVersionObjectManager < TaskActivity > activityObjectManager ,
210+ INameVersionObjectManager < TaskEntity > entityObjectManager ,
211+ VersioningSettings versioningSettings ,
212+ ILoggerFactory loggerFactory = null )
143213 {
144214 this . orchestrationManager = orchestrationObjectManager ?? throw new ArgumentException ( "orchestrationObjectManager" ) ;
145215 this . activityManager = activityObjectManager ?? throw new ArgumentException ( "activityObjectManager" ) ;
146216 this . entityManager = entityObjectManager ?? throw new ArgumentException ( "entityObjectManager" ) ;
147217 this . orchestrationService = orchestrationService ?? throw new ArgumentException ( "orchestrationService" ) ;
148218 this . logHelper = new LogHelper ( loggerFactory ? . CreateLogger ( "DurableTask.Core" ) ) ;
149219 this . dispatchEntitiesSeparately = ( orchestrationService as IEntityOrchestrationService ) ? . EntityBackendProperties ? . UseSeparateQueueForEntityWorkItems ?? false ;
220+ this . versioningSettings = versioningSettings ;
150221 }
151222
152223 /// <summary>
@@ -219,13 +290,13 @@ public async Task<TaskHubWorker> StartAsync()
219290
220291 this . logHelper . TaskHubWorkerStarting ( ) ;
221292 var sw = Stopwatch . StartNew ( ) ;
222-
223293 this . orchestrationDispatcher = new TaskOrchestrationDispatcher (
224294 this . orchestrationService ,
225295 this . orchestrationManager ,
226296 this . orchestrationDispatchPipeline ,
227297 this . logHelper ,
228- this . ErrorPropagationMode ) ;
298+ this . ErrorPropagationMode ,
299+ this . versioningSettings ) ;
229300 this . activityDispatcher = new TaskActivityDispatcher (
230301 this . orchestrationService ,
231302 this . activityManager ,
@@ -357,7 +428,7 @@ public TaskHubWorker AddTaskEntities(params Type[] taskEntityTypes)
357428 type . Name ,
358429 string . Empty ,
359430 type ) ;
360-
431+
361432 this . entityManager . Add ( creator ) ;
362433 }
363434
0 commit comments