From 684453cab11b9b4cbab21a52fdb6be5f28d76434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 23 Jan 2017 11:29:06 +0300 Subject: [PATCH] Minor refactor for DbContextOptionsFactory --- .../AbpDbContextConfigurationContext.cs | 16 ++++++++++----- .../DbContextOptionsFactory.cs | 20 +++++++++++++++---- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs index 332d38f005..dd76b50323 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs @@ -1,20 +1,26 @@ -using JetBrains.Annotations; +using System; +using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; +using Volo.DependencyInjection; namespace Volo.Abp.EntityFrameworkCore.DependencyInjection { - public class AbpDbContextConfigurationContext + public class AbpDbContextConfigurationContext : IServiceProviderAccessor { + public IServiceProvider ServiceProvider { get; } + public string ConnectionString { get; } public string ConnectionStringName { get; } public DbContextOptionsBuilder DbContextOptions { get; protected set; } - public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName) + public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName, [NotNull] IServiceProvider serviceProvider) { ConnectionString = connectionString; ConnectionStringName = connectionStringName; + ServiceProvider = serviceProvider; + DbContextOptions = new DbContextOptionsBuilder(); } } @@ -24,8 +30,8 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection { public new DbContextOptionsBuilder DbContextOptions => (DbContextOptionsBuilder)base.DbContextOptions; - public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName) - : base(connectionString, connectionStringName) + public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName, [NotNull] IServiceProvider serviceProvider) + : base(connectionString, connectionStringName, serviceProvider) { base.DbContextOptions = new DbContextOptionsBuilder(); } diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs index 973ec8ef26..6f1c7de208 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs @@ -16,11 +16,13 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection using (var scope = serviceProvider.CreateScope()) { - var connInfoResolver = scope.ServiceProvider.GetRequiredService(); + var context = new AbpDbContextConfigurationContext( + GetConnectionString(scope, connectionStringName), + connectionStringName, + scope.ServiceProvider + ); - var context = new AbpDbContextConfigurationContext(connInfoResolver.Resolve(connectionStringName), connectionStringName); - - var dbContextOptions = scope.ServiceProvider.GetRequiredService>().Value; + var dbContextOptions = GetDbContextOptions(scope); var configureAction = dbContextOptions.ConfigureActions.GetOrDefault(typeof(TDbContext)); if (configureAction != null) @@ -39,5 +41,15 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection return context.DbContextOptions.Options; } } + + private static AbpDbContextOptions GetDbContextOptions(IServiceScope scope) where TDbContext : AbpDbContext + { + return scope.ServiceProvider.GetRequiredService>().Value; + } + + private static string GetConnectionString(IServiceScope scope, string connectionStringName) + { + return scope.ServiceProvider.GetRequiredService().Resolve(connectionStringName); + } } } \ No newline at end of file