From ac350145bf5c10e9595792c0e856d3adc96b054e Mon Sep 17 00:00:00 2001 From: tanshanli Date: Thu, 25 Jan 2024 15:14:41 +0800 Subject: [PATCH] create ChangeRepository(IServiceProvider serviceProvider) --- .../SqlSugar/Interface/ISimpleClient.cs | 1 + Src/Asp.NetCore2/SqlSugar/SimpleClient.cs | 35 ++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/ISimpleClient.cs b/Src/Asp.NetCore2/SqlSugar/Interface/ISimpleClient.cs index 584fea882..fef916dc0 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/ISimpleClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/ISimpleClient.cs @@ -13,6 +13,7 @@ namespace SqlSugar RepositoryType CopyNew() where RepositoryType : ISugarRepository; SimpleClient Change() where ChangeType : class, new(); RepositoryType ChangeRepository() where RepositoryType : ISugarRepository ; + RepositoryType ChangeRepository(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository; IDeleteable AsDeleteable(); IInsertable AsInsertable(List insertObjs); IInsertable AsInsertable(T insertObj); diff --git a/Src/Asp.NetCore2/SqlSugar/SimpleClient.cs b/Src/Asp.NetCore2/SqlSugar/SimpleClient.cs index b907d095a..fa6c4b06e 100644 --- a/Src/Asp.NetCore2/SqlSugar/SimpleClient.cs +++ b/Src/Asp.NetCore2/SqlSugar/SimpleClient.cs @@ -79,11 +79,11 @@ namespace SqlSugar } public RepositoryType CopyNew(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository { - var instance = handleDependencies(typeof(RepositoryType), serviceProvider); + var instance = handleDependencies(typeof(RepositoryType), serviceProvider,true); return (RepositoryType)instance; } - private object handleDependencies(Type type, IServiceProvider serviceProvider) + private object handleDependencies(Type type, IServiceProvider serviceProvider,bool needNewCopy = false) { ConstructorInfo constructorInfo = null; var newInstanceType = type; @@ -103,8 +103,7 @@ namespace SqlSugar object dependencyInstance = serviceProvider.GetService(type); if (dependencyInstance is ISugarRepository sugarRepository) { - sugarRepository.Context = sugarRepository.Context.CopyNew(); - return sugarRepository; + return setContext(sugarRepository, needNewCopy); } else { @@ -130,7 +129,28 @@ namespace SqlSugar } return instance; } - + private ISugarRepository setContext(ISugarRepository sugarRepository,bool needNewCopy) + { + if (sugarRepository.Context != null) + { + if (needNewCopy) + { + sugarRepository.Context = sugarRepository.Context.CopyNew(); + } + } + else + { + if (needNewCopy) + { + sugarRepository.Context = this.Context.CopyNew(); + } + else + { + sugarRepository.Context = this.Context; + } + } + return sugarRepository; + } private bool IsAssignableToBaseRepository(Type type) { var baseInterfaces = type.GetInterfaces(); @@ -169,6 +189,11 @@ namespace SqlSugar } return result; } + public RepositoryType ChangeRepository(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository + { + var instance = handleDependencies(typeof(RepositoryType), serviceProvider, false); + return (RepositoryType)instance; + } public ISugarQueryable AsQueryable() { return Context.Queryable();