Fix distributed lock extensions

This commit is contained in:
Sipke Schoorstra 2021-04-07 15:36:08 +02:00
parent a3e7b1e023
commit 52cd21d0ff
5 changed files with 13 additions and 14 deletions

View file

@ -8,15 +8,14 @@ namespace Elsa
{
public class DistributedLockingOptionsBuilder
{
public DistributedLockingOptionsBuilder(ElsaOptionsBuilder elsaOptions)
public DistributedLockingOptionsBuilder(ElsaOptionsBuilder elsaOptionsBuilder) => ElsaOptionsBuilder = elsaOptionsBuilder;
public ElsaOptionsBuilder ElsaOptionsBuilder { get; }
public IServiceCollection Services => ElsaOptionsBuilder.Services;
public DistributedLockingOptionsBuilder UseProviderFactory(Func<IServiceProvider, Func<string, IDistributedLock>> factory)
{
ElsaOptions = elsaOptions;
DistributedLockProviderFactory = sp => name => new FileDistributedLock(new DirectoryInfo(Environment.CurrentDirectory), name);
ElsaOptionsBuilder.ElsaOptions.DistributedLockingOptions.DistributedLockProviderFactory = factory;
return this;
}
public ElsaOptionsBuilder ElsaOptions { get; }
public IServiceCollection Services => ElsaOptions.Services;
public Func<IServiceProvider, Func<string, IDistributedLock>> DistributedLockProviderFactory { get; set; }
}
}

View file

@ -50,7 +50,7 @@ namespace Elsa
public IList<Type> WorkflowTypes { get; } = new List<Type>();
public IList<Type> MessageTypes { get; } = new List<Type>();
public ServiceBusOptions ServiceBusOptions { get; } = new();
public DistributedLockingOptions DistributedLockingOptions { get; }
public DistributedLockingOptions DistributedLockingOptions { get; set; }
/// <summary>
/// The amount of time to wait before giving up on trying to acquire a lock.

View file

@ -7,9 +7,9 @@ namespace Elsa
{
public static class DistributedLockingOptionsExtensions
{
public static DistributedLockingOptions UseSqlServerLockProvider(this DistributedLockingOptions options, Uri blobContainerUrl)
public static DistributedLockingOptionsBuilder UseSqlServerLockProvider(this DistributedLockingOptionsBuilder options, Uri blobContainerUrl)
{
options.DistributedLockProviderFactory = sp => CreateAzureDistributedLockFactory(sp, blobContainerUrl);
options.UseProviderFactory(sp => CreateAzureDistributedLockFactory(sp, blobContainerUrl));
return options;
}

View file

@ -18,7 +18,7 @@ namespace Elsa
.UseStackExchangeConnectionMultiplexer(connectionString)
.UseRedLockFactory();
options.DistributedLockProviderFactory = CreateRedisDistributedLockFactory;
options.UseProviderFactory(CreateRedisDistributedLockFactory);
return options;
}

View file

@ -4,9 +4,9 @@ namespace Elsa
{
public static class DistributedLockingOptionsExtensions
{
public static DistributedLockingOptions UseSqlServerLockProvider(this DistributedLockingOptions options, string connectionString)
public static DistributedLockingOptionsBuilder UseSqlServerLockProvider(this DistributedLockingOptionsBuilder options, string connectionString)
{
options.DistributedLockProviderFactory = sp => name => new SqlDistributedLock(name, connectionString);
options.UseProviderFactory(sp => name => new SqlDistributedLock(name, connectionString));
return options;
}
}