Small MongoDB provider improvements

This commit is contained in:
Sipke Schoorstra 2021-02-17 21:43:42 +01:00
parent 3f173d6468
commit ce7222af28
3 changed files with 29 additions and 19 deletions

View file

@ -10,33 +10,38 @@ namespace Elsa.Persistence.MongoDb.Extensions
{
public static class ServiceCollectionExtensions
{
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions)
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions) => UseMongoDbPersistence<ElsaMongoDbContext>(elsa, configureOptions);
public static ElsaOptions UseMongoDbPersistence<TDbContext>(this ElsaOptions elsa, Action<ElsaMongoDbOptions> configureOptions) where TDbContext: ElsaMongoDbContext
{
AddCore(elsa);
AddCore<TDbContext>(elsa);
elsa.Services.Configure(configureOptions);
return elsa;
}
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, IConfiguration options)
public static ElsaOptions UseMongoDbPersistence(this ElsaOptions elsa, IConfiguration configuration) => UseMongoDbPersistence<ElsaMongoDbContext>(elsa, configuration);
public static ElsaOptions UseMongoDbPersistence<TDbContext>(this ElsaOptions elsa, IConfiguration configuration) where TDbContext: ElsaMongoDbContext
{
AddCore(elsa);
elsa.Services.Configure<ElsaMongoDbOptions>(options);
AddCore<TDbContext>(elsa);
elsa.Services.Configure<ElsaMongoDbOptions>(configuration);
return elsa;
}
private static void AddCore(ElsaOptions elsa)
private static void AddCore<TDbContext>(ElsaOptions elsa) where TDbContext : ElsaMongoDbContext
{
elsa.Services
.AddSingleton<MongoDbWorkflowDefinitionStore>()
.AddSingleton<MongoDbWorkflowInstanceStore>()
.AddSingleton<MongoDbWorkflowExecutionLogStore>()
.AddSingleton<MongoDbBookmarkStore>()
.AddSingleton<ElsaMongoDbContext>()
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowDefinitions)
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowInstances)
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().WorkflowExecutionLog)
.AddSingleton(sp => sp.GetRequiredService<ElsaMongoDbContext>().Bookmarks)
.AddSingleton<TDbContext>()
.AddSingleton<ElsaMongoDbContext, TDbContext>()
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowDefinitions)
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowInstances)
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().WorkflowExecutionLog)
.AddSingleton(sp => sp.GetRequiredService<TDbContext>().Bookmarks)
.AddStartupTask<DatabaseInitializer>();
elsa

View file

@ -7,17 +7,19 @@ namespace Elsa.Persistence.MongoDb.Services
{
public class ElsaMongoDbContext
{
private readonly IMongoDatabase _mongoDatabase;
public ElsaMongoDbContext(IOptions<ElsaMongoDbOptions> options)
{
var mongoClient = new MongoClient(options.Value.ConnectionString);
_mongoDatabase = mongoClient.GetDatabase(options.Value.Db);
var connectionString = options.Value.ConnectionString;
var mongoClient = new MongoClient(connectionString);
var databaseName = options.Value.Db is not null and not "" ? options.Value.Db : MongoUrl.Create(connectionString).DatabaseName;
MongoDatabase = mongoClient.GetDatabase(databaseName);
}
protected IMongoDatabase MongoDatabase { get; }
public IMongoCollection<WorkflowDefinition> WorkflowDefinitions => _mongoDatabase.GetCollection<WorkflowDefinition>(CollectionNames.WorkflowDefinitions);
public IMongoCollection<WorkflowInstance> WorkflowInstances => _mongoDatabase.GetCollection<WorkflowInstance>(CollectionNames.WorkflowInstances);
public IMongoCollection<WorkflowExecutionLogRecord> WorkflowExecutionLog => _mongoDatabase.GetCollection<WorkflowExecutionLogRecord>(CollectionNames.WorkflowExecutionLog);
public IMongoCollection<Bookmark> Bookmarks => _mongoDatabase.GetCollection<Bookmark>(CollectionNames.Bookmarks);
public IMongoCollection<WorkflowDefinition> WorkflowDefinitions => MongoDatabase.GetCollection<WorkflowDefinition>(CollectionNames.WorkflowDefinitions);
public IMongoCollection<WorkflowInstance> WorkflowInstances => MongoDatabase.GetCollection<WorkflowInstance>(CollectionNames.WorkflowInstances);
public IMongoCollection<WorkflowExecutionLogRecord> WorkflowExecutionLog => MongoDatabase.GetCollection<WorkflowExecutionLogRecord>(CollectionNames.WorkflowExecutionLog);
public IMongoCollection<Bookmark> Bookmarks => MongoDatabase.GetCollection<Bookmark>(CollectionNames.Bookmarks);
}
}

View file

@ -49,6 +49,9 @@ namespace Elsa.Persistence.MongoDb.Stores
foreach (var entity in list.Where(x => x.Id == null!))
entity.Id = IdGenerator.Generate();
if (!list.Any())
return;
await Collection.InsertManyAsync(list, default, cancellationToken);
}