Skip to content

Commit

Permalink
Fix session scope
Browse files Browse the repository at this point in the history
  • Loading branch information
glucaci committed Oct 2, 2023
1 parent 51c8a64 commit 378ddf3
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 17 deletions.
8 changes: 5 additions & 3 deletions src/Session.Abstractions/ISessionProvider.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Extensions.Context;

namespace MongoDB.Extensions.Session;

public interface ISessionProvider<TContext>
where TContext : IMongoDbContext
public interface ISessionProvider
{
Task<ITransactionSession> BeginTransactionAsync(
CancellationToken cancellationToken);

Task<ISession> StartSessionAsync(
CancellationToken cancellationToken);
}

public interface ISessionProvider<TScope> : ISessionProvider
{
}
26 changes: 15 additions & 11 deletions src/Session.Tests/MongoSessionProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ public MongoSessionProviderTests(MongoReplicaSetResource mongoResource)

_serviceProvider = new ServiceCollection()
.AddSingleton(mongoOptions)
.AddMongoSessionProvider<TestDbContext>()
.AddMongoSessionProvider<TestDbContext, ITestScope>()
.BuildServiceProvider();
}

[Fact]
public async Task BeginTransactionAsync_ShouldBeginTransaction()
{
// Arrange
ISessionProvider<TestDbContext> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<TestDbContext>>();
ISessionProvider<ITestScope> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<ITestScope>>();

// Act
ITransactionSession transactionSession = await sessionProvider
Expand All @@ -51,8 +51,8 @@ public async Task BeginTransactionAsync_ShouldBeginTransaction()
public async Task StartSessionAsync_ShouldStartSession()
{
// Arrange
ISessionProvider<TestDbContext> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<TestDbContext>>();
ISessionProvider<ITestScope> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<ITestScope>>();

// Act
ISession session = await sessionProvider
Expand All @@ -69,8 +69,8 @@ public async Task StartSessionAsync_ShouldStartSession()
public async Task MongoSession_Dispose_ShouldDisposeSession()
{
// Arrange
ISessionProvider<TestDbContext> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<TestDbContext>>();
ISessionProvider<ITestScope> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<ITestScope>>();

ISession session = await sessionProvider
.StartSessionAsync(CancellationToken.None);
Expand All @@ -87,8 +87,8 @@ public async Task MongoSession_Dispose_ShouldDisposeSession()
public async Task MongoTransactionSession_Dispose_ShouldDisposeSession()
{
// Arrange
ISessionProvider<TestDbContext> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<TestDbContext>>();
ISessionProvider<ITestScope> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<ITestScope>>();

ITransactionSession transactionSession = await sessionProvider
.BeginTransactionAsync(CancellationToken.None);
Expand All @@ -105,8 +105,8 @@ public async Task MongoTransactionSession_Dispose_ShouldDisposeSession()
public async Task MongoTransactionSession_NotCommitting_ShouldNotAffectDatabase()
{
// Arrange
ISessionProvider<TestDbContext> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<TestDbContext>>();
ISessionProvider<ITestScope> sessionProvider = _serviceProvider
.GetRequiredService<ISessionProvider<ITestScope>>();

ITransactionSession transactionSession = await sessionProvider
.BeginTransactionAsync(CancellationToken.None);
Expand Down Expand Up @@ -135,4 +135,8 @@ protected override void OnConfiguring(IMongoDatabaseBuilder mongoDatabaseBuilder
{
}
}

private interface ITestScope
{
}
}
2 changes: 1 addition & 1 deletion src/Session/Internal/MongoSessionProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace MongoDB.Extensions.Session;

internal class MongoSessionProvider<TContext> : ISessionProvider<TContext>
internal class MongoSessionProvider<TContext, TScope> : ISessionProvider<TScope>
where TContext : IMongoDbContext
{
private readonly IMongoClient _mongoClient;
Expand Down
4 changes: 2 additions & 2 deletions src/Session/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ namespace MongoDB.Extensions.Session;

public static class ServiceCollectionExtensions
{
public static IServiceCollection AddMongoSessionProvider<TContext>(
public static IServiceCollection AddMongoSessionProvider<TContext, TScope>(
this IServiceCollection services)
where TContext : class, IMongoDbContext
{
services.TryAddSingleton<TContext>();
services.TryAddSingleton<ISessionProvider<TContext>, MongoSessionProvider<TContext>>();
services.TryAddSingleton<ISessionProvider<TScope>, MongoSessionProvider<TContext, TScope>>();

return services;
}
Expand Down

0 comments on commit 378ddf3

Please sign in to comment.