diff --git a/Examples/aspnetcore_transaction/Controllers/HomeController.cs b/Examples/aspnetcore_transaction/Controllers/HomeController.cs index 35129473..269d1f0d 100644 --- a/Examples/aspnetcore_transaction/Controllers/HomeController.cs +++ b/Examples/aspnetcore_transaction/Controllers/HomeController.cs @@ -1,8 +1,12 @@ using FreeSql; using FreeSql.DataAnnotations; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.ComponentModel; +using System.Linq; +using System.Reflection; +using System.Threading; using System.Threading.Tasks; namespace aspnetcore_transaction.Controllers @@ -102,4 +106,53 @@ namespace aspnetcore_transaction.Controllers public int SongId { get; set; } public string Title { get; set; } } + + public static class IdleBusExtesions + { + static AsyncLocal AsyncLocalTenantId = new AsyncLocal(); + public static IdleBus ChangeTenant(this IdleBus ib, string tenantId) + { + AsyncLocalTenantId.Value = tenantId; + return ib; + } + public static IFreeSql Get(this IdleBus ib) => ib.Get(AsyncLocalTenantId.Value ?? "default"); + public static IBaseRepository GetRepository(this IdleBus ib) where T : class => ib.Get().GetRepository(); + + static void test() + { + IdleBus ib = null; //单例注入 + + var fsql = ib.Get(); //获取当前租户对应的 IFreeSql + + var fsql00102 = ib.ChangeTenant("00102").Get(); //切换租户,后面的操作都是针对 00102 + + var songRepository = ib.GetRepository(); + var detailRepository = ib.GetRepository(); + } + + public static IServiceCollection AddRepository(this IServiceCollection services, params Assembly[] assemblies) + { + services.AddScoped(typeof(IBaseRepository<>), typeof(YourDefaultRepository<>)); + services.AddScoped(typeof(BaseRepository<>), typeof(YourDefaultRepository<>)); + + services.AddScoped(typeof(IBaseRepository<,>), typeof(YourDefaultRepository<,>)); + services.AddScoped(typeof(BaseRepository<,>), typeof(YourDefaultRepository<,>)); + + if (assemblies?.Any() == true) + foreach (var asse in assemblies) + foreach (var repo in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a))) + services.AddScoped(repo); + + return services; + } + } + + class YourDefaultRepository : BaseRepository where T : class + { + public YourDefaultRepository(IdleBus ib) : base(ib.Get(), null, null) { } + } + class YourDefaultRepository : BaseRepository where T : class + { + public YourDefaultRepository(IdleBus ib) : base(ib.Get(), null, null) { } + } } diff --git a/Examples/aspnetcore_transaction/aspnetcore_transaction.csproj b/Examples/aspnetcore_transaction/aspnetcore_transaction.csproj index 77ed7fb2..6a13bfe0 100644 --- a/Examples/aspnetcore_transaction/aspnetcore_transaction.csproj +++ b/Examples/aspnetcore_transaction/aspnetcore_transaction.csproj @@ -12,7 +12,7 @@ - + diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.csproj b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.csproj index 926e775f..0acabc69 100644 --- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.csproj +++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/readme.md b/readme.md index 2a395ae4..ff4a56b6 100644 --- a/readme.md +++ b/readme.md @@ -187,7 +187,7 @@ QQ群:4336577(已满)、8578575(在线) ## 💕  Donation -L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元 +L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元 > Thank you for your donation