Browse Source

Minor refactor for DbContextOptionsFactory

pull/81/head
Halil İbrahim Kalkan 10 years ago
parent
commit
684453cab1
  1. 16
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs
  2. 20
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs

16
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 Microsoft.EntityFrameworkCore;
using Volo.DependencyInjection;
namespace Volo.Abp.EntityFrameworkCore.DependencyInjection namespace Volo.Abp.EntityFrameworkCore.DependencyInjection
{ {
public class AbpDbContextConfigurationContext public class AbpDbContextConfigurationContext : IServiceProviderAccessor
{ {
public IServiceProvider ServiceProvider { get; }
public string ConnectionString { get; } public string ConnectionString { get; }
public string ConnectionStringName { get; } public string ConnectionStringName { get; }
public DbContextOptionsBuilder DbContextOptions { get; protected set; } 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; ConnectionString = connectionString;
ConnectionStringName = connectionStringName; ConnectionStringName = connectionStringName;
ServiceProvider = serviceProvider;
DbContextOptions = new DbContextOptionsBuilder(); DbContextOptions = new DbContextOptionsBuilder();
} }
} }
@ -24,8 +30,8 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection
{ {
public new DbContextOptionsBuilder<TDbContext> DbContextOptions => (DbContextOptionsBuilder<TDbContext>)base.DbContextOptions; public new DbContextOptionsBuilder<TDbContext> DbContextOptions => (DbContextOptionsBuilder<TDbContext>)base.DbContextOptions;
public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName) public AbpDbContextConfigurationContext(string connectionString, [CanBeNull] string connectionStringName, [NotNull] IServiceProvider serviceProvider)
: base(connectionString, connectionStringName) : base(connectionString, connectionStringName, serviceProvider)
{ {
base.DbContextOptions = new DbContextOptionsBuilder<TDbContext>(); base.DbContextOptions = new DbContextOptionsBuilder<TDbContext>();
} }

20
src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs

@ -16,11 +16,13 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection
using (var scope = serviceProvider.CreateScope()) 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 = GetDbContextOptions<TDbContext>(scope);
var dbContextOptions = scope.ServiceProvider.GetRequiredService<IOptions<AbpDbContextOptions>>().Value;
var configureAction = dbContextOptions.ConfigureActions.GetOrDefault(typeof(TDbContext)); var configureAction = dbContextOptions.ConfigureActions.GetOrDefault(typeof(TDbContext));
if (configureAction != null) if (configureAction != null)
@ -39,5 +41,15 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection
return context.DbContextOptions.Options; 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