@@ -25,22 +25,32 @@ namespace DotNetCore.CAP | |||
services.AddScoped<ICallbackPublisher, CapPublisher>(); | |||
services.AddTransient<IAdditionalProcessor, DefaultAdditionalProcessor>(); | |||
AddSingletionMySqlOptions(services); | |||
} | |||
private void AddSingletionMySqlOptions(IServiceCollection services) | |||
{ | |||
var mysqlOptions = new MySqlOptions(); | |||
_configure(mysqlOptions); | |||
if (mysqlOptions.DbContextType != null) | |||
{ | |||
services.AddSingleton(x => | |||
{ | |||
using (var scope = x.CreateScope()) | |||
{ | |||
var provider = scope.ServiceProvider; | |||
var dbContext = (DbContext) provider.GetService(mysqlOptions.DbContextType); | |||
var dbContext = (DbContext)provider.GetService(mysqlOptions.DbContextType); | |||
mysqlOptions.ConnectionString = dbContext.Database.GetDbConnection().ConnectionString; | |||
return mysqlOptions; | |||
} | |||
}); | |||
} | |||
else | |||
{ | |||
services.AddSingleton(mysqlOptions); | |||
} | |||
} | |||
} | |||
} |
@@ -16,6 +16,7 @@ namespace Microsoft.Extensions.DependencyInjection | |||
{ | |||
if (configure == null) throw new ArgumentNullException(nameof(configure)); | |||
options.RegisterExtension(new MySqlCapOptionsExtension(configure)); | |||
return options; | |||
@@ -32,10 +33,11 @@ namespace Microsoft.Extensions.DependencyInjection | |||
{ | |||
if (configure == null) throw new ArgumentNullException(nameof(configure)); | |||
var efOptions = new EFOptions {DbContextType = typeof(TContext)}; | |||
configure(efOptions); | |||
options.RegisterExtension(new MySqlCapOptionsExtension(configure)); | |||
options.RegisterExtension(new MySqlCapOptionsExtension(x => | |||
{ | |||
configure(x); | |||
x.DbContextType = typeof(TContext); | |||
})); | |||
return options; | |||
} | |||
@@ -24,7 +24,7 @@ namespace Microsoft.Extensions.DependencyInjection | |||
public static CapOptions UseEntityFramework<TContext>(this CapOptions options) | |||
where TContext : DbContext | |||
{ | |||
return options.UseEntityFramework<TContext>(opt => { opt.DbContextType = typeof(TContext); }); | |||
return options.UseEntityFramework<TContext>(opt => { }); | |||
} | |||
public static CapOptions UseEntityFramework<TContext>(this CapOptions options, Action<EFOptions> configure) | |||
@@ -32,10 +32,11 @@ namespace Microsoft.Extensions.DependencyInjection | |||
{ | |||
if (configure == null) throw new ArgumentNullException(nameof(configure)); | |||
var efOptions = new EFOptions {DbContextType = typeof(TContext)}; | |||
configure(efOptions); | |||
options.RegisterExtension(new PostgreSqlCapOptionsExtension(configure)); | |||
options.RegisterExtension(new PostgreSqlCapOptionsExtension(x => | |||
{ | |||
configure(x); | |||
x.DbContextType = typeof(TContext); | |||
})); | |||
return options; | |||
} | |||
@@ -25,10 +25,16 @@ namespace DotNetCore.CAP | |||
services.AddScoped<ICallbackPublisher, CapPublisher>(); | |||
services.AddTransient<IAdditionalProcessor, DefaultAdditionalProcessor>(); | |||
AddSingletonPostgreSqlOptions(services); | |||
} | |||
private void AddSingletonPostgreSqlOptions(IServiceCollection services) | |||
{ | |||
var postgreSqlOptions = new PostgreSqlOptions(); | |||
_configure(postgreSqlOptions); | |||
if (postgreSqlOptions.DbContextType != null) | |||
{ | |||
services.AddSingleton(x => | |||
{ | |||
using (var scope = x.CreateScope()) | |||
@@ -39,8 +45,11 @@ namespace DotNetCore.CAP | |||
return postgreSqlOptions; | |||
} | |||
}); | |||
} | |||
else | |||
{ | |||
services.AddSingleton(postgreSqlOptions); | |||
} | |||
} | |||
} | |||
} |
@@ -24,7 +24,7 @@ namespace Microsoft.Extensions.DependencyInjection | |||
public static CapOptions UseEntityFramework<TContext>(this CapOptions options) | |||
where TContext : DbContext | |||
{ | |||
return options.UseEntityFramework<TContext>(opt => { opt.DbContextType = typeof(TContext); }); | |||
return options.UseEntityFramework<TContext>(opt => { }); | |||
} | |||
public static CapOptions UseEntityFramework<TContext>(this CapOptions options, Action<EFOptions> configure) | |||
@@ -32,10 +32,11 @@ namespace Microsoft.Extensions.DependencyInjection | |||
{ | |||
if (configure == null) throw new ArgumentNullException(nameof(configure)); | |||
var efOptions = new EFOptions {DbContextType = typeof(TContext)}; | |||
configure(efOptions); | |||
options.RegisterExtension(new SqlServerCapOptionsExtension(configure)); | |||
options.RegisterExtension(new SqlServerCapOptionsExtension(x => | |||
{ | |||
configure(x); | |||
x.DbContextType = typeof(TContext); | |||
})); | |||
return options; | |||
} | |||
@@ -24,6 +24,7 @@ namespace DotNetCore.CAP | |||
services.AddScoped<ICapPublisher, CapPublisher>(); | |||
services.AddScoped<ICallbackPublisher, CapPublisher>(); | |||
services.AddTransient<IAdditionalProcessor, DefaultAdditionalProcessor>(); | |||
AddSqlServerOptions(services); | |||
} | |||
@@ -34,18 +35,22 @@ namespace DotNetCore.CAP | |||
_configure(sqlServerOptions); | |||
if (sqlServerOptions.DbContextType != null) | |||
{ | |||
services.AddSingleton(x => | |||
{ | |||
using (var scope = x.CreateScope()) | |||
{ | |||
var provider = scope.ServiceProvider; | |||
var dbContext = (DbContext) provider.GetService(sqlServerOptions.DbContextType); | |||
var dbContext = (DbContext)provider.GetService(sqlServerOptions.DbContextType); | |||
sqlServerOptions.ConnectionString = dbContext.Database.GetDbConnection().ConnectionString; | |||
return sqlServerOptions; | |||
} | |||
}); | |||
} | |||
else | |||
{ | |||
services.AddSingleton(sqlServerOptions); | |||
} | |||
} | |||
} | |||
} |