From 1218306f03f73ba938a52e88cac041a1bcef9917 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:27:25 +0800 Subject: [PATCH 1/3] Make MongoClientSettings configurable --- .../Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs | 10 +++++++--- .../Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 10 ++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs index aaee9571cd..0cd282ec68 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; +using MongoDB.Driver; namespace Volo.Abp.MongoDB { @@ -7,11 +9,13 @@ namespace Volo.Abp.MongoDB { internal Dictionary DbContextReplacements { get; } + public Action MongoClientSettingsConfigurer { get; set; } + public AbpMongoDbContextOptions() { DbContextReplacements = new Dictionary(); } - + internal Type GetReplacedTypeOrSelf(Type dbContextType) { var replacementType = dbContextType; @@ -26,7 +30,7 @@ namespace Volo.Abp.MongoDB dbContextType.AssemblyQualifiedName ); } - + replacementType = foundType; } else @@ -36,4 +40,4 @@ namespace Volo.Abp.MongoDB } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 2a3842441f..3e1c450ab6 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.Uow.MongoDB IUnitOfWorkManager unitOfWorkManager, IConnectionStringResolver connectionStringResolver, ICancellationTokenProvider cancellationTokenProvider, - ICurrentTenant currentTenant, + ICurrentTenant currentTenant, IOptions options) { _unitOfWorkManager = unitOfWorkManager; @@ -124,7 +124,10 @@ namespace Volo.Abp.Uow.MongoDB private TMongoDbContext CreateDbContext(IUnitOfWork unitOfWork, MongoUrl mongoUrl, string databaseName) { - var client = new MongoClient(mongoUrl); + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + + var client = new MongoClient(mongoClientSettings); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -144,6 +147,9 @@ namespace Volo.Abp.Uow.MongoDB string databaseName, CancellationToken cancellationToken = default) { + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + var client = new MongoClient(mongoUrl); var database = client.GetDatabase(databaseName); From 28e1b64537bd6b511d0afceadd78cdeb010a5179 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:41:23 +0800 Subject: [PATCH 2/3] Update UnitOfWorkMongoDbContextProvider.cs --- .../UnitOfWorkMongoDbContextProvider.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 3e1c450ab6..dd32ada275 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -124,10 +124,7 @@ namespace Volo.Abp.Uow.MongoDB private TMongoDbContext CreateDbContext(IUnitOfWork unitOfWork, MongoUrl mongoUrl, string databaseName) { - var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); - _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - - var client = new MongoClient(mongoClientSettings); + var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -147,10 +144,7 @@ namespace Volo.Abp.Uow.MongoDB string databaseName, CancellationToken cancellationToken = default) { - var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); - _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - - var client = new MongoClient(mongoUrl); + var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -279,6 +273,14 @@ namespace Volo.Abp.Uow.MongoDB return _connectionStringResolver.Resolve(dbContextType); } + private MongoClient CreateMongoClient(MongoUrl mongoUrl) + { + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + + return new MongoClient(mongoUrl); + } + protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) { return _cancellationTokenProvider.FallbackToProvider(preferredValue); From 2dfe6ead7f310791562d463ef8905022b9ca7f85 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:42:00 +0800 Subject: [PATCH 3/3] Update UnitOfWorkMongoDbContextProvider.cs --- .../Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index dd32ada275..671a676726 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -278,7 +278,7 @@ namespace Volo.Abp.Uow.MongoDB var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - return new MongoClient(mongoUrl); + return new MongoClient(mongoClientSettings); } protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default)