diff --git a/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs b/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs
index 2531fd0be5..a025f149c7 100644
--- a/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs
+++ b/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs
@@ -8,4 +8,5 @@ namespace Paramore.Brighter.MongoDb;
/// This interface combines MongoDB client access with transaction management
/// using for ACID guarantees.
///
-public interface IAmAMongoDbTransactionProvider : IAmAMongoDbConnectionProvider, IAmABoxTransactionProvider;
+public interface IAmAMongoDbTransactionProvider : IAmAMongoDbConnectionProvider,
+ IAmABoxTransactionProvider;
diff --git a/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs b/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs
index f324ff057b..32478ac2d1 100644
--- a/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs
+++ b/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs
@@ -13,9 +13,9 @@ namespace Paramore.Brighter.MongoDb;
/// to offer both connection and transaction management.
///
/// The MongoDB configuration used to obtain the client.
-public class MongoDbUnitOfWork(IAmAMongoDbConfiguration configuration) : IAmAMongoDbTransactionProvider
+public class MongoDbUnitOfWork(IAmAMongoDbConfiguration configuration) : IAmAMongoDbTransactionProvider, IAmABoxTransactionProvider
{
- private IClientSession? _session;
+ private IClientSessionHandle? _session;
///
public IMongoClient Client { get; } = configuration.Client;
@@ -102,14 +102,24 @@ public async Task RollbackAsync(CancellationToken cancellationToken = default)
}
///
- public IClientSession GetTransaction()
+ public IClientSessionHandle GetTransaction()
{
return _session = Client.StartSession();
}
-
+
///
- public async Task GetTransactionAsync(CancellationToken cancellationToken = default)
+ public async Task GetTransactionAsync(CancellationToken cancellationToken = default)
{
return _session = await Client.StartSessionAsync(cancellationToken: cancellationToken);
}
+
+ async Task IAmABoxTransactionProvider.GetTransactionAsync(CancellationToken cancellationToken)
+ {
+ return await GetTransactionAsync(cancellationToken);
+ }
+
+ IClientSession IAmABoxTransactionProvider.GetTransaction()
+ {
+ return GetTransaction();
+ }
}
diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs
new file mode 100644
index 0000000000..b86f8d495b
--- /dev/null
+++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs
@@ -0,0 +1,26 @@
+using System;
+using MongoDB.Driver;
+using Xunit;
+
+namespace Paramore.Brighter.MongoDb.Tests.Outbox;
+
+[Trait("Category", "MongoDb")]
+public class MongoDbValidateTransactionProvider
+{
+ [Fact]
+ public void When_Resolving_Transaction_Provider()
+ {
+ Type transactionProviderInterface = typeof(IAmABoxTransactionProvider<>);
+ Type? transactionType = null;
+ foreach (Type i in typeof(MongoDbUnitOfWork).GetInterfaces())
+ {
+ if (i.IsGenericType && i.GetGenericTypeDefinition() == transactionProviderInterface)
+ {
+ transactionType = i.GetGenericArguments()[0];
+ }
+ }
+
+ Assert.NotNull(transactionType);
+ Assert.Equal(typeof(IClientSessionHandle) , transactionType);
+ }
+}