Skip to content

Commit 406f486

Browse files
committed
remove nulls from constructors and dry up the service extensions
1 parent b06b690 commit 406f486

File tree

9 files changed

+40
-30
lines changed

9 files changed

+40
-30
lines changed

src/providers/WorkflowCore.Providers.AWS/ServiceCollectionExtensions.cs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Amazon;
33
using Amazon.DynamoDBv2;
4+
using Amazon.Kinesis;
45
using Amazon.Runtime;
56
using Amazon.SQS;
67
using Microsoft.Extensions.Logging;
@@ -15,47 +16,55 @@ public static class ServiceCollectionExtensions
1516
{
1617
public static WorkflowOptions UseAwsSimpleQueueService(this WorkflowOptions options, AWSCredentials credentials, AmazonSQSConfig config, string queuesPrefix = "workflowcore")
1718
{
18-
options.UseQueueProvider(sp => new SQSQueueProvider(credentials, config, null, sp.GetService<ILoggerFactory>(), queuesPrefix));
19-
return options;
19+
var sqsClient = new AmazonSQSClient(credentials, config);
20+
return UseAwsSimpleQueueServiceWithProvisionedClient(options, sqsClient, queuesPrefix);
2021
}
2122

2223
public static WorkflowOptions UseAwsSimpleQueueServiceWithProvisionedClient(this WorkflowOptions options, AmazonSQSClient sqsClient, string queuesPrefix = "workflowcore")
2324
{
24-
options.UseQueueProvider(sp => new SQSQueueProvider(null, null, sqsClient, sp.GetService<ILoggerFactory>(), queuesPrefix));
25+
options.UseQueueProvider(sp => new SQSQueueProvider(sqsClient, sp.GetService<ILoggerFactory>(), queuesPrefix));
2526
return options;
2627
}
2728

2829
public static WorkflowOptions UseAwsDynamoLocking(this WorkflowOptions options, AWSCredentials credentials, AmazonDynamoDBConfig config, string tableName)
2930
{
30-
options.UseDistributedLockManager(sp => new DynamoLockProvider(credentials, config, null, tableName, sp.GetService<ILoggerFactory>(), sp.GetService<IDateTimeProvider>()));
31-
return options;
31+
var dbClient = new AmazonDynamoDBClient(credentials, config);
32+
return UseAwsDynamoLockingWithProvisionedClient(options, dbClient, tableName);
3233
}
3334

3435
public static WorkflowOptions UseAwsDynamoLockingWithProvisionedClient (this WorkflowOptions options, AmazonDynamoDBClient dynamoClient, string tableName)
3536
{
36-
options.UseDistributedLockManager(sp => new DynamoLockProvider(null, null, dynamoClient, tableName, sp.GetService<ILoggerFactory>(), sp.GetService<IDateTimeProvider>()));
37+
options.UseDistributedLockManager(sp => new DynamoLockProvider(dynamoClient, tableName, sp.GetService<ILoggerFactory>(), sp.GetService<IDateTimeProvider>()));
3738
return options;
3839
}
3940

4041
public static WorkflowOptions UseAwsDynamoPersistence(this WorkflowOptions options, AWSCredentials credentials, AmazonDynamoDBConfig config, string tablePrefix)
4142
{
42-
options.Services.AddTransient<IDynamoDbProvisioner>(sp => new DynamoDbProvisioner(credentials, config, null, tablePrefix, sp.GetService<ILoggerFactory>()));
43-
options.UsePersistence(sp => new DynamoPersistenceProvider(credentials, config, null, sp.GetService<IDynamoDbProvisioner>(), tablePrefix, sp.GetService<ILoggerFactory>()));
44-
return options;
43+
var dbClient = new AmazonDynamoDBClient(credentials, config);
44+
return UseAwsDynamoPersistenceWithProvisionedClient(options, dbClient, tablePrefix);
4545
}
4646

4747
public static WorkflowOptions UseAwsDynamoPersistenceWithProvisionedClient(this WorkflowOptions options, AmazonDynamoDBClient dynamoClient, string tablePrefix)
4848
{
49-
options.Services.AddTransient<IDynamoDbProvisioner>(sp => new DynamoDbProvisioner(null, null, dynamoClient, tablePrefix, sp.GetService<ILoggerFactory>()));
50-
options.UsePersistence(sp => new DynamoPersistenceProvider(null, null, dynamoClient, sp.GetService<IDynamoDbProvisioner>(), tablePrefix, sp.GetService<ILoggerFactory>()));
49+
options.Services.AddTransient<IDynamoDbProvisioner>(sp => new DynamoDbProvisioner(dynamoClient, tablePrefix, sp.GetService<ILoggerFactory>()));
50+
options.UsePersistence(sp => new DynamoPersistenceProvider(dynamoClient, sp.GetService<IDynamoDbProvisioner>(), tablePrefix, sp.GetService<ILoggerFactory>()));
5151
return options;
5252
}
5353

5454
public static WorkflowOptions UseAwsKinesis(this WorkflowOptions options, AWSCredentials credentials, RegionEndpoint region, string appName, string streamName)
5555
{
56-
options.Services.AddTransient<IKinesisTracker>(sp => new KinesisTracker(credentials, region, "workflowcore_kinesis", sp.GetService<ILoggerFactory>()));
57-
options.Services.AddTransient<IKinesisStreamConsumer>(sp => new KinesisStreamConsumer(credentials, region, sp.GetService<IKinesisTracker>(), sp.GetService<IDistributedLockProvider>(), sp.GetService<ILoggerFactory>(), sp.GetService<IDateTimeProvider>()));
58-
options.UseEventHub(sp => new KinesisProvider(credentials, region, appName, streamName, sp.GetService<IKinesisStreamConsumer>(), sp.GetService<ILoggerFactory>()));
56+
var kinesisClient = new AmazonKinesisClient(credentials, region);
57+
var dynamoClient = new AmazonDynamoDBClient(credentials, region);
58+
59+
return UseAwsKinesisWithProvisionedClients(options, kinesisClient, dynamoClient,appName, streamName);
60+
61+
}
62+
63+
public static WorkflowOptions UseAwsKinesisWithProvisionedClients(this WorkflowOptions options, AmazonKinesisClient kinesisClient, AmazonDynamoDBClient dynamoDbClient, string appName, string streamName)
64+
{
65+
options.Services.AddTransient<IKinesisTracker>(sp => new KinesisTracker(dynamoDbClient, "workflowcore_kinesis", sp.GetService<ILoggerFactory>()));
66+
options.Services.AddTransient<IKinesisStreamConsumer>(sp => new KinesisStreamConsumer(kinesisClient, sp.GetService<IKinesisTracker>(), sp.GetService<IDistributedLockProvider>(), sp.GetService<ILoggerFactory>(), sp.GetService<IDateTimeProvider>()));
67+
options.UseEventHub(sp => new KinesisProvider(kinesisClient, appName, streamName, sp.GetService<IKinesisStreamConsumer>(), sp.GetService<ILoggerFactory>()));
5968
return options;
6069
}
6170
}

src/providers/WorkflowCore.Providers.AWS/Services/DynamoDbProvisioner.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ public class DynamoDbProvisioner : IDynamoDbProvisioner
1515
private readonly IAmazonDynamoDB _client;
1616
private readonly string _tablePrefix;
1717

18-
public DynamoDbProvisioner(AWSCredentials credentials, AmazonDynamoDBConfig config, AmazonDynamoDBClient dynamoDBClient, string tablePrefix, ILoggerFactory logFactory)
18+
public DynamoDbProvisioner(AmazonDynamoDBClient dynamoDBClient, string tablePrefix, ILoggerFactory logFactory)
1919
{
2020
_logger = logFactory.CreateLogger<DynamoDbProvisioner>();
21-
_client = dynamoDBClient ?? new AmazonDynamoDBClient(credentials, config);
21+
_client = dynamoDBClient;
2222
_tablePrefix = tablePrefix;
2323
}
2424

src/providers/WorkflowCore.Providers.AWS/Services/DynamoLockProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ public class DynamoLockProvider : IDistributedLockProvider
2525
private readonly AutoResetEvent _mutex = new AutoResetEvent(true);
2626
private readonly IDateTimeProvider _dateTimeProvider;
2727

28-
public DynamoLockProvider(AWSCredentials credentials, AmazonDynamoDBConfig config, AmazonDynamoDBClient dynamoDBClient, string tableName, ILoggerFactory logFactory, IDateTimeProvider dateTimeProvider)
28+
public DynamoLockProvider(AmazonDynamoDBClient dynamoDBClient, string tableName, ILoggerFactory logFactory, IDateTimeProvider dateTimeProvider)
2929
{
3030
_logger = logFactory.CreateLogger<DynamoLockProvider>();
31-
_client = dynamoDBClient ?? new AmazonDynamoDBClient(credentials, config);
31+
_client = dynamoDBClient;
3232
_localLocks = new List<string>();
3333
_tableName = tableName;
3434
_nodeId = Guid.NewGuid().ToString();

src/providers/WorkflowCore.Providers.AWS/Services/DynamoPersistenceProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public class DynamoPersistenceProvider : IPersistenceProvider
2626

2727
public bool SupportsScheduledCommands => false;
2828

29-
public DynamoPersistenceProvider(AWSCredentials credentials, AmazonDynamoDBConfig config, AmazonDynamoDBClient dynamoDBClient, IDynamoDbProvisioner provisioner, string tablePrefix, ILoggerFactory logFactory)
29+
public DynamoPersistenceProvider(AmazonDynamoDBClient dynamoDBClient, IDynamoDbProvisioner provisioner, string tablePrefix, ILoggerFactory logFactory)
3030
{
3131
_logger = logFactory.CreateLogger<DynamoPersistenceProvider>();
32-
_client = dynamoDBClient ?? new AmazonDynamoDBClient(credentials, config);
32+
_client = dynamoDBClient;
3333
_tablePrefix = tablePrefix;
3434
_provisioner = provisioner;
3535
}

src/providers/WorkflowCore.Providers.AWS/Services/KinesisProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ public class KinesisProvider : ILifeCycleEventHub
2626
private readonly int _defaultShardCount = 1;
2727
private bool _started = false;
2828

29-
public KinesisProvider(AWSCredentials credentials, RegionEndpoint region, string appName, string streamName, IKinesisStreamConsumer consumer, ILoggerFactory logFactory)
29+
public KinesisProvider(AmazonKinesisClient kinesisClient, string appName, string streamName, IKinesisStreamConsumer consumer, ILoggerFactory logFactory)
3030
{
3131
_logger = logFactory.CreateLogger(GetType());
3232
_appName = appName;
3333
_streamName = streamName;
3434
_consumer = consumer;
3535
_serializer = new JsonSerializer();
3636
_serializer.TypeNameHandling = TypeNameHandling.All;
37-
_client = new AmazonKinesisClient(credentials, region);
37+
_client = kinesisClient;
3838
}
3939

4040
public async Task PublishNotification(LifeCycleEvent evt)

src/providers/WorkflowCore.Providers.AWS/Services/KinesisStreamConsumer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ public class KinesisStreamConsumer : IKinesisStreamConsumer, IDisposable
2525
private ICollection<ShardSubscription> _subscribers = new HashSet<ShardSubscription>();
2626
private readonly IDateTimeProvider _dateTimeProvider;
2727

28-
public KinesisStreamConsumer(AWSCredentials credentials, RegionEndpoint region, IKinesisTracker tracker, IDistributedLockProvider lockManager, ILoggerFactory logFactory, IDateTimeProvider dateTimeProvider)
28+
public KinesisStreamConsumer(AmazonKinesisClient kinesisClient, IKinesisTracker tracker, IDistributedLockProvider lockManager, ILoggerFactory logFactory, IDateTimeProvider dateTimeProvider)
2929
{
3030
_logger = logFactory.CreateLogger(GetType());
3131
_tracker = tracker;
3232
_lockManager = lockManager;
33-
_client = new AmazonKinesisClient(credentials, region);
33+
_client = kinesisClient;
3434
_processTask = new Task(Process);
3535
_processTask.Start();
3636
_dateTimeProvider = dateTimeProvider;

src/providers/WorkflowCore.Providers.AWS/Services/KinesisTracker.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public class KinesisTracker : IKinesisTracker
1717
private readonly string _tableName;
1818
private bool _tableConfirmed = false;
1919

20-
public KinesisTracker(AWSCredentials credentials, RegionEndpoint region, string tableName, ILoggerFactory logFactory)
20+
public KinesisTracker(AmazonDynamoDBClient client, string tableName, ILoggerFactory logFactory)
2121
{
2222
_logger = logFactory.CreateLogger(GetType());
23-
_client = new AmazonDynamoDBClient(credentials, region);
23+
_client = client;
2424
_tableName = tableName;
2525
}
2626

src/providers/WorkflowCore.Providers.AWS/Services/SQSQueueProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ public class SQSQueueProvider : IQueueProvider
2121

2222
public bool IsDequeueBlocking => true;
2323

24-
public SQSQueueProvider(AWSCredentials credentials, AmazonSQSConfig config, AmazonSQSClient sqsClient, ILoggerFactory logFactory, string queuesPrefix)
24+
public SQSQueueProvider(AmazonSQSClient sqsClient, ILoggerFactory logFactory, string queuesPrefix)
2525
{
2626
_logger = logFactory.CreateLogger<SQSQueueProvider>();
27-
_client = sqsClient ?? new AmazonSQSClient(credentials, config);
27+
_client = sqsClient;
2828
_queuesPrefix = queuesPrefix;
2929
}
3030

test/WorkflowCore.Tests.DynamoDB/DynamoPersistenceProviderFixture.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ protected override IPersistenceProvider Subject
2626
if (_subject == null)
2727
{
2828
var cfg = new AmazonDynamoDBConfig { ServiceURL = DynamoDbDockerSetup.ConnectionString };
29-
var provisioner = new DynamoDbProvisioner(DynamoDbDockerSetup.Credentials, cfg, null, "unittests", new LoggerFactory());
30-
var client = new DynamoPersistenceProvider(DynamoDbDockerSetup.Credentials, cfg, null, provisioner, "unittests", new LoggerFactory());
29+
var dbClient = new AmazonDynamoDBClient(DynamoDbDockerSetup.Credentials, cfg);
30+
var provisioner = new DynamoDbProvisioner(dbClient, "unittests", new LoggerFactory());
31+
var client = new DynamoPersistenceProvider(dbClient, provisioner, "unittests", new LoggerFactory());
3132
client.EnsureStoreExists();
3233
_subject = client;
3334
}

0 commit comments

Comments
 (0)