Minor refactor for DbContextOptionsFactory

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent db51087459
commit 684453cab1

@ -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<TDbContext> DbContextOptions => (DbContextOptionsBuilder<TDbContext>)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<TDbContext>();
}

@ -16,11 +16,13 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection
using (var scope = serviceProvider.CreateScope())
{
var connInfoResolver = scope.ServiceProvider.GetRequiredService<IConnectionStringResolver>();
var context = new AbpDbContextConfigurationContext<TDbContext>(
GetConnectionString(scope, connectionStringName),
connectionStringName,
scope.ServiceProvider
);
var context = new AbpDbContextConfigurationContext<TDbContext>(connInfoResolver.Resolve(connectionStringName), connectionStringName);
var dbContextOptions = scope.ServiceProvider.GetRequiredService<IOptions<AbpDbContextOptions>>().Value;
var dbContextOptions = GetDbContextOptions<TDbContext>(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<TDbContext>(IServiceScope scope) where TDbContext : AbpDbContext<TDbContext>
{
return scope.ServiceProvider.GetRequiredService<IOptions<AbpDbContextOptions>>().Value;
}
private static string GetConnectionString(IServiceScope scope, string connectionStringName)
{
return scope.ServiceProvider.GetRequiredService<IConnectionStringResolver>().Resolve(connectionStringName);
}
}
}
Loading…
Cancel
Save