测试外部依赖注入

This commit is contained in:
xuejiaming 2022-06-27 08:52:09 +08:00
parent efb785a005
commit 04842ea5b4
3 changed files with 51 additions and 6 deletions

View File

@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@ -9,6 +10,7 @@ using MySqlConnector;
using Sample.MySql.DbContexts;
using Sample.MySql.Shardings;
using ShardingCore;
using ShardingCore.EFCores.OptionsExtensions;
using ShardingCore.Helpers;
using ShardingCore.TableExists;
@ -41,7 +43,7 @@ namespace Sample.MySql
// op.AddShardingTableRoute<SysUserModVirtualTableRoute>();
// op.AddShardingTableRoute<SysUserSalaryVirtualTableRoute>();
// });
// services.AddSingleton<IShardingRuntimeContext, ShardingRuntimeContext>();
services.AddShardingDbContext<DefaultShardingDbContext>()
.AddEntityConfig(o =>
{
@ -89,6 +91,19 @@ namespace Sample.MySql
}
app.UseShardingCore();
// using (var scope = app.ApplicationServices.CreateScope())
// {
// var dbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
// var shardingRuntimeContext = dbContext.GetService<IShardingRuntimeContext>();
// Console.WriteLine("123");
// }
// using (var scope = app.ApplicationServices.CreateScope())
// {
// var dbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
// var shardingRuntimeContext = dbContext.GetService<IShardingRuntimeContext>();
// Console.WriteLine("1231");
// }
app.UseRouting();
app.UseAuthorization();

View File

@ -88,7 +88,7 @@ namespace ShardingCore
{
var virtualDataSource = serviceProvider.GetRequiredService<IVirtualDataSourceManager<TShardingDbContext>>().GetCurrentVirtualDataSource();
var connectionString = virtualDataSource.GetConnectionString(virtualDataSource.DefaultDataSourceName);
var contextOptionsBuilder = virtualDataSource.ConfigurationParams.UseDbContextOptionsBuilder(connectionString, dbContextOptionsBuilder).UseSharding<TShardingDbContext>();
var contextOptionsBuilder = virtualDataSource.ConfigurationParams.UseDbContextOptionsBuilder(connectionString, dbContextOptionsBuilder).UseSharding<TShardingDbContext>();//serviceProvider.GetRequiredService<IShardingRuntimeContext>()
virtualDataSource.ConfigurationParams.UseShellDbContextOptionBuilder(contextOptionsBuilder);
}
internal static IServiceCollection AddInternalShardingCore<TShardingDbContext>(this IServiceCollection services) where TShardingDbContext : DbContext, IShardingDbContext
@ -155,7 +155,8 @@ namespace ShardingCore
}
public static DbContextOptionsBuilder UseSharding<TShardingDbContext>(this DbContextOptionsBuilder optionsBuilder) where TShardingDbContext : DbContext, IShardingDbContext
{
return optionsBuilder.UseShardingWrapMark()
//,IShardingRuntimeContext shardingRuntimeContext
return optionsBuilder.UseShardingWrapMark()//shardingRuntimeContext
.ReplaceService<IDbSetSource, ShardingDbSetSource>()
.ReplaceService<IQueryCompiler, ShardingQueryCompiler>()
.ReplaceService<IDbContextTransactionManager, ShardingRelationalTransactionManager<TShardingDbContext>>()
@ -165,14 +166,15 @@ namespace ShardingCore
private static DbContextOptionsBuilder UseShardingWrapMark(this DbContextOptionsBuilder optionsBuilder)
{
var extension = optionsBuilder.CreateOrGetExtension();
//IShardingRuntimeContext shardingRuntimeContext
var extension = optionsBuilder.CreateOrGetExtension();//shardingRuntimeContext
((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension);
return optionsBuilder;
}
private static ShardingWrapOptionsExtension CreateOrGetExtension(this DbContextOptionsBuilder optionsBuilder)
private static ShardingWrapOptionsExtension CreateOrGetExtension(this DbContextOptionsBuilder optionsBuilder)//,IShardingRuntimeContext shardingRuntimeContext
=> optionsBuilder.Options.FindExtension<ShardingWrapOptionsExtension>() ??
new ShardingWrapOptionsExtension();
new ShardingWrapOptionsExtension();//shardingRuntimeContext
public static DbContextOptionsBuilder UseInnerDbContextSharding<TShardingDbContext>(this DbContextOptionsBuilder optionsBuilder) where TShardingDbContext : DbContext, IShardingDbContext
{

View File

@ -13,12 +13,40 @@ namespace ShardingCore.EFCores.OptionsExtensions
* @Ver: 1.0
* @Email: 326308290@qq.com
*/
// public interface IShardingRuntimeContext
// {
// Guid id { get; }
// void Say();
// }
// public class ShardingRuntimeContext : IShardingRuntimeContext
// {
// public Guid id { get; set; }=Guid.NewGuid();
//
// public ShardingRuntimeContext()
// {
// Console.WriteLine("ShardingRuntimeContext:"+id);
// }
// public void Say()
// {
// Console.WriteLine(id);
// }
// }
#if EFCORE6
public class ShardingWrapOptionsExtension : IDbContextOptionsExtension
{
// private readonly IShardingRuntimeContext _shardingRuntimeContext;
// public ShardingWrapOptionsExtension(IShardingRuntimeContext shardingRuntimeContext)
// {
// // _shardingRuntimeContext = shardingRuntimeContext;
// // Console.WriteLine("ShardingWrapOptionsExtension.ctor:"+shardingRuntimeContext.id);
// }
public void ApplyServices(IServiceCollection services)
{
// services.AddSingleton<IShardingRuntimeContext>(_shardingRuntimeContext);
// Console.WriteLine("ShardingWrapOptionsExtension.ctor:ApplyServices");
}
public void Validate(IDbContextOptions options)