From c4931470fec64bd681565d1093367261c93e2016 Mon Sep 17 00:00:00 2001 From: xuejiaming <326308290@qq.com> Date: Mon, 27 Jun 2022 08:26:13 +0800 Subject: [PATCH] 1 --- src/ShardingCore/Core/IShardingRuntimeContext.cs | 11 +++++++++++ .../Core/IShardingRuntimeContextFactory.cs | 7 +++++++ .../OptionsExtensions/ShardingWrapOptionsExtension.cs | 7 ++++++- src/ShardingCore/EFCores/ShardingQueryCompiler.cs | 4 ++-- 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/ShardingCore/Core/IShardingRuntimeContext.cs create mode 100644 src/ShardingCore/Core/IShardingRuntimeContextFactory.cs diff --git a/src/ShardingCore/Core/IShardingRuntimeContext.cs b/src/ShardingCore/Core/IShardingRuntimeContext.cs new file mode 100644 index 00000000..15d06d6d --- /dev/null +++ b/src/ShardingCore/Core/IShardingRuntimeContext.cs @@ -0,0 +1,11 @@ +using System; + +namespace ShardingCore.Core +{ + + public interface IShardingRuntimeContext + { + object GetService(Type serviceType); + TService GetService(); + } +} diff --git a/src/ShardingCore/Core/IShardingRuntimeContextFactory.cs b/src/ShardingCore/Core/IShardingRuntimeContextFactory.cs new file mode 100644 index 00000000..1d8d90ce --- /dev/null +++ b/src/ShardingCore/Core/IShardingRuntimeContextFactory.cs @@ -0,0 +1,7 @@ +namespace ShardingCore.Core +{ + public interface IShardingRuntimeContextFactory + { + IShardingRuntimeContext Create(); + } +} \ No newline at end of file diff --git a/src/ShardingCore/EFCores/OptionsExtensions/ShardingWrapOptionsExtension.cs b/src/ShardingCore/EFCores/OptionsExtensions/ShardingWrapOptionsExtension.cs index 9160a02b..da2918d2 100644 --- a/src/ShardingCore/EFCores/OptionsExtensions/ShardingWrapOptionsExtension.cs +++ b/src/ShardingCore/EFCores/OptionsExtensions/ShardingWrapOptionsExtension.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.Extensions.DependencyInjection; +using ShardingCore.Core; namespace ShardingCore.EFCores.OptionsExtensions { @@ -17,12 +18,16 @@ namespace ShardingCore.EFCores.OptionsExtensions #if EFCORE6 public class ShardingWrapOptionsExtension : IDbContextOptionsExtension { - public ShardingWrapOptionsExtension() + private readonly IShardingRuntimeContext _shardingRuntimeContext; + + public ShardingWrapOptionsExtension(IShardingRuntimeContext shardingRuntimeContext) { + _shardingRuntimeContext = shardingRuntimeContext; Console.WriteLine("ShardingWrapOptionsExtension ctor"); } public void ApplyServices(IServiceCollection services) { + services.AddSingleton(sp => _shardingRuntimeContext); Console.WriteLine("ShardingWrapOptionsExtension ApplyServices"); } diff --git a/src/ShardingCore/EFCores/ShardingQueryCompiler.cs b/src/ShardingCore/EFCores/ShardingQueryCompiler.cs index d13064f1..e61fb4d6 100644 --- a/src/ShardingCore/EFCores/ShardingQueryCompiler.cs +++ b/src/ShardingCore/EFCores/ShardingQueryCompiler.cs @@ -23,11 +23,11 @@ namespace ShardingCore.EFCores private readonly IShardingDbContext _shardingDbContext; private readonly IShardingCompilerExecutor _shardingCompilerExecutor; - public ShardingQueryCompiler(ICurrentDbContext currentContext) + public ShardingQueryCompiler(ICurrentDbContext currentContext,IShardingRuntimeContext shardingRuntimeContext) { _shardingDbContext = currentContext.Context as IShardingDbContext ?? throw new ShardingCoreException("db context operator is not IShardingDbContext"); - _shardingCompilerExecutor = ShardingRuntimeContext.GetInstance().GetService(); + _shardingCompilerExecutor = shardingRuntimeContext.GetService(); } public TResult Execute(Expression query)