Browse Source

Merge pull request #335 from colinin/4.4

fix(tenant): fix the inconsistent tenant service name
pull/364/head
yx lin 4 years ago
committed by GitHub
parent
commit
1cda09a45b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 427
      aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
  2. 4
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN.Abp.MultiTenancy.DbFinder.csproj
  3. 131
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantCreateEventHandler.cs
  4. 55
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantDeleteEventHandler.cs
  5. 131
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantUpdateEventHandler.cs
  6. 76
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/README.md
  7. 1
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN.Abp.MultiTenancy.RemoteService.csproj
  8. 85
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantCreateEventHandler.cs
  9. 55
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantDeleteEventHandler.cs
  10. 85
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantUpdateEventHandler.cs
  11. 114
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/README.md
  12. 13
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/CreateConnectionStringEventData.cs
  13. 11
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/DeleteConnectionStringEventData.cs
  14. 9
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/DeleteEventData.cs
  15. 17
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/UpdateConnectionStringEventData.cs
  16. 13
      aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/UpdateEventData.cs
  17. 361
      aspnet-core/modules/tenants/LINGYUN.Abp.TenantManagement.Application/LINGYUN/Abp/TenantManagement/TenantAppService.cs
  18. 42
      aspnet-core/modules/tenants/LINGYUN.Abp.TenantManagement.HttpApi.Client/LINGYUN/Abp/TenantManagement/AbpTenantManagementHttpApiClientModule.cs

427
aspnet-core/LINGYUN.MicroService.BackendAdmin.sln

@ -1,210 +1,217 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{ED23B2F3-87C1-44B6-8906-9DE739422C2C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{1E8D56FE-2FA1-4041-AB69-00952BF42EC9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackendAdmin.HttpApi.Host", "services\admin\LINGYUN.Abp.BackendAdmin.HttpApi.Host\LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj", "{A12DB303-F90B-4E56-B99F-A40816FCB04A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenant-management", "tenant-management", "{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application.Contracts", "modules\tenants\LINGYUN.Abp.TenantManagement.Application.Contracts\LINGYUN.Abp.TenantManagement.Application.Contracts.csproj", "{926E8543-6A0E-4B36-8F3C-9278281E3420}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application", "modules\tenants\LINGYUN.Abp.TenantManagement.Application\LINGYUN.Abp.TenantManagement.Application.csproj", "{0DDA914E-CE2A-446F-A43D-09C52704D39C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi\LINGYUN.Abp.TenantManagement.HttpApi.csproj", "{E7185ACE-4D40-4215-BBD7-73D2DB69F482}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi.Client", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj", "{011F5FF0-468F-4423-8DC3-C3ECC3F63829}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "setting-management", "setting-management", "{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{35A4661D-12A0-47A9-ACC6-111D1474A88B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{9EAAB564-5971-4AE3-9228-3953C228A890}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{709E77F9-DABF-47D3-A86E-40CD5448B1E5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{BE063443-09F6-4611-AE17-811AD00D51E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{DAD70E78-D4A1-4B19-AF11-9236825FF013}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "permissions-management", "{D25C4814-71AB-4A9D-8C76-298A7DE1A747}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{8F972C8E-F047-4883-A4BF-3423A2BAED36}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{A387EF32-1FAD-412F-893D-43485CE59DB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{9BABF219-AAAA-4611-8B49-BFCCBD046934}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{B36F627B-FD7D-4357-A623-F01AFF78B80D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{EAD2F955-88CA-4570-AB81-31FB2FF02605}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.Build.0 = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.Build.0 = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.ActiveCfg = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.Build.0 = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.Build.0 = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.Build.0 = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.Build.0 = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.ActiveCfg = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.Build.0 = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.Build.0 = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.Build.0 = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.Build.0 = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.Build.0 = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.Build.0 = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.Build.0 = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.Build.0 = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.Build.0 = Release|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.Build.0 = Release|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.Build.0 = Release|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.Build.0 = Release|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.Build.0 = Release|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.Build.0 = Release|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.Build.0 = Release|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.Build.0 = Release|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.Build.0 = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A} = {1E8D56FE-2FA1-4041-AB69-00952BF42EC9}
{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{926E8543-6A0E-4B36-8F3C-9278281E3420} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{0DDA914E-CE2A-446F-A43D-09C52704D39C} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{E7185ACE-4D40-4215-BBD7-73D2DB69F482} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{011F5FF0-468F-4423-8DC3-C3ECC3F63829} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{35A4661D-12A0-47A9-ACC6-111D1474A88B} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{9EAAB564-5971-4AE3-9228-3953C228A890} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{709E77F9-DABF-47D3-A86E-40CD5448B1E5} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{BE063443-09F6-4611-AE17-811AD00D51E9} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{DAD70E78-D4A1-4B19-AF11-9236825FF013} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747}
{8F972C8E-F047-4883-A4BF-3423A2BAED36} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{A387EF32-1FAD-412F-893D-43485CE59DB4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{9BABF219-AAAA-4611-8B49-BFCCBD046934} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{B36F627B-FD7D-4357-A623-F01AFF78B80D} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{EAD2F955-88CA-4570-AB81-31FB2FF02605} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4} = {8F972C8E-F047-4883-A4BF-3423A2BAED36}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{ED23B2F3-87C1-44B6-8906-9DE739422C2C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{1E8D56FE-2FA1-4041-AB69-00952BF42EC9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackendAdmin.HttpApi.Host", "services\admin\LINGYUN.Abp.BackendAdmin.HttpApi.Host\LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj", "{A12DB303-F90B-4E56-B99F-A40816FCB04A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenant-management", "tenant-management", "{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application.Contracts", "modules\tenants\LINGYUN.Abp.TenantManagement.Application.Contracts\LINGYUN.Abp.TenantManagement.Application.Contracts.csproj", "{926E8543-6A0E-4B36-8F3C-9278281E3420}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application", "modules\tenants\LINGYUN.Abp.TenantManagement.Application\LINGYUN.Abp.TenantManagement.Application.csproj", "{0DDA914E-CE2A-446F-A43D-09C52704D39C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi\LINGYUN.Abp.TenantManagement.HttpApi.csproj", "{E7185ACE-4D40-4215-BBD7-73D2DB69F482}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi.Client", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj", "{011F5FF0-468F-4423-8DC3-C3ECC3F63829}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "setting-management", "setting-management", "{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{35A4661D-12A0-47A9-ACC6-111D1474A88B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{9EAAB564-5971-4AE3-9228-3953C228A890}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{709E77F9-DABF-47D3-A86E-40CD5448B1E5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{BE063443-09F6-4611-AE17-811AD00D51E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{DAD70E78-D4A1-4B19-AF11-9236825FF013}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "permissions-management", "{D25C4814-71AB-4A9D-8C76-298A7DE1A747}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{8F972C8E-F047-4883-A4BF-3423A2BAED36}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{A387EF32-1FAD-412F-893D-43485CE59DB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{9BABF219-AAAA-4611-8B49-BFCCBD046934}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{B36F627B-FD7D-4357-A623-F01AFF78B80D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{EAD2F955-88CA-4570-AB81-31FB2FF02605}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy", "modules\tenants\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj", "{360B5928-DD64-42AA-8C99-07EFC5224C24}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.Build.0 = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.Build.0 = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.ActiveCfg = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.Build.0 = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.Build.0 = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.Build.0 = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.Build.0 = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.ActiveCfg = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.Build.0 = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.Build.0 = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.Build.0 = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.Build.0 = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.Build.0 = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.Build.0 = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.Build.0 = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.Build.0 = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.Build.0 = Release|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.Build.0 = Release|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.Build.0 = Release|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.Build.0 = Release|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.Build.0 = Release|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.Build.0 = Release|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.Build.0 = Release|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.Build.0 = Release|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.Build.0 = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4}.Release|Any CPU.Build.0 = Release|Any CPU
{360B5928-DD64-42AA-8C99-07EFC5224C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{360B5928-DD64-42AA-8C99-07EFC5224C24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{360B5928-DD64-42AA-8C99-07EFC5224C24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{360B5928-DD64-42AA-8C99-07EFC5224C24}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A} = {1E8D56FE-2FA1-4041-AB69-00952BF42EC9}
{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{926E8543-6A0E-4B36-8F3C-9278281E3420} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{0DDA914E-CE2A-446F-A43D-09C52704D39C} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{E7185ACE-4D40-4215-BBD7-73D2DB69F482} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{011F5FF0-468F-4423-8DC3-C3ECC3F63829} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{35A4661D-12A0-47A9-ACC6-111D1474A88B} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{9EAAB564-5971-4AE3-9228-3953C228A890} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{709E77F9-DABF-47D3-A86E-40CD5448B1E5} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{BE063443-09F6-4611-AE17-811AD00D51E9} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{DAD70E78-D4A1-4B19-AF11-9236825FF013} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747}
{8F972C8E-F047-4883-A4BF-3423A2BAED36} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{A387EF32-1FAD-412F-893D-43485CE59DB4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{9BABF219-AAAA-4611-8B49-BFCCBD046934} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{B36F627B-FD7D-4357-A623-F01AFF78B80D} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{EAD2F955-88CA-4570-AB81-31FB2FF02605} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
{5C3D0A48-4EE3-4968-9826-5F52ADDC22C4} = {8F972C8E-F047-4883-A4BF-3423A2BAED36}
{360B5928-DD64-42AA-8C99-07EFC5224C24} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF}
EndGlobalSection
EndGlobal

4
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN.Abp.MultiTenancy.DbFinder.csproj

@ -12,4 +12,8 @@
<PackageReference Include="Volo.Abp.TenantManagement.Domain" Version="4.4.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj" />
</ItemGroup>
</Project>

131
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantCreateEventHandler.cs

@ -1,63 +1,68 @@
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
using Volo.Abp.Uow;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantCreateEventHandler : IDistributedEventHandler<EntityCreatedEto<TenantEto>>, ITransientDependency
{
private readonly ILogger<TenantCreateEventHandler> _logger;
private readonly ICurrentTenant _currentTenant;
private readonly ITenantRepository _tenantRepository;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantCreateEventHandler(
ICurrentTenant currentTenant,
ITenantRepository tenantRepository,
ILogger<TenantCreateEventHandler> logger,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_logger = logger;
_currentTenant = currentTenant;
_tenantRepository = tenantRepository;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData)
{
try
{
using (_currentTenant.Change(null))
{
var tenant = await _tenantRepository.FindAsync(eventData.Entity.Id, true);
if (tenant == null)
{
return;
}
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenant.ConnectionStrings)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenant.Id, tenant.Name, connectionStrings);
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.SetAsync(cacheKey, cacheItem);
}
}
catch (Exception ex)
{
_logger.LogException(ex);
}
}
}
}
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
using Volo.Abp.Uow;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantCreateEventHandler : IDistributedEventHandler<EntityCreatedEto<TenantEto>>, ITransientDependency
{
private readonly ILogger<TenantCreateEventHandler> _logger;
private readonly ICurrentTenant _currentTenant;
private readonly ITenantRepository _tenantRepository;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantCreateEventHandler(
ICurrentTenant currentTenant,
ITenantRepository tenantRepository,
ILogger<TenantCreateEventHandler> logger,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_logger = logger;
_currentTenant = currentTenant;
_tenantRepository = tenantRepository;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData)
{
try
{
using (_currentTenant.Change(null))
{
var tenant = await _tenantRepository.FindAsync(eventData.Entity.Id, true);
if (tenant == null)
{
return;
}
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenant.ConnectionStrings)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenant.Id, tenant.Name, connectionStrings);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()),
cacheItem);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name),
cacheItem);
}
}
catch (Exception ex)
{
_logger.LogException(ex);
}
}
}
}

55
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantDeleteEventHandler.cs

@ -1,26 +1,29 @@
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantDeleteEventHandler : IDistributedEventHandler<EntityDeletedEto<TenantEto>>, ITransientDependency
{
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantDeleteEventHandler(
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
}
public virtual async Task HandleEventAsync(EntityDeletedEto<TenantEto> eventData)
{
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.RemoveAsync(cacheKey);
}
}
}
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantDeleteEventHandler : IDistributedEventHandler<EntityDeletedEto<TenantEto>>, ITransientDependency
{
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantDeleteEventHandler(
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
}
public virtual async Task HandleEventAsync(EntityDeletedEto<TenantEto> eventData)
{
await _cache.RemoveAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()));
await _cache.RemoveAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name));
}
}
}

131
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/LINGYUN/Abp/MultiTenancy/DbFinder/EventBus/Distributed/TenantUpdateEventHandler.cs

@ -1,63 +1,68 @@
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
using Volo.Abp.Uow;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantUpdateEventHandler : IDistributedEventHandler<EntityUpdatedEto<TenantEto>>, ITransientDependency
{
private readonly ILogger<TenantUpdateEventHandler> _logger;
private readonly ICurrentTenant _currentTenant;
private readonly ITenantRepository _tenantRepository;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantUpdateEventHandler(
ICurrentTenant currentTenant,
ITenantRepository tenantRepository,
ILogger<TenantUpdateEventHandler> logger,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_logger = logger;
_currentTenant = currentTenant;
_tenantRepository = tenantRepository;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityUpdatedEto<TenantEto> eventData)
{
try
{
using (_currentTenant.Change(null))
{
var tenant = await _tenantRepository.FindAsync(eventData.Entity.Id, true);
if (tenant == null)
{
return;
}
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenant.ConnectionStrings)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenant.Id, tenant.Name, connectionStrings);
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.SetAsync(cacheKey, cacheItem);
}
}
catch(Exception ex)
{
_logger.LogException(ex);
}
}
}
}
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TenantManagement;
using Volo.Abp.Uow;
namespace LINGYUN.Abp.MultiTenancy.DbFinder.EventBus.Distributed
{
public class TenantUpdateEventHandler : IDistributedEventHandler<EntityUpdatedEto<TenantEto>>, ITransientDependency
{
private readonly ILogger<TenantUpdateEventHandler> _logger;
private readonly ICurrentTenant _currentTenant;
private readonly ITenantRepository _tenantRepository;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantUpdateEventHandler(
ICurrentTenant currentTenant,
ITenantRepository tenantRepository,
ILogger<TenantUpdateEventHandler> logger,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_logger = logger;
_currentTenant = currentTenant;
_tenantRepository = tenantRepository;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityUpdatedEto<TenantEto> eventData)
{
try
{
using (_currentTenant.Change(null))
{
var tenant = await _tenantRepository.FindAsync(eventData.Entity.Id, true);
if (tenant == null)
{
return;
}
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenant.ConnectionStrings)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenant.Id, tenant.Name, connectionStrings);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()),
cacheItem);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name),
cacheItem);
}
}
catch(Exception ex)
{
_logger.LogException(ex);
}
}
}
}

76
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.DbFinder/README.md

@ -1,39 +1,39 @@
# LINGYUN.Abp.MultiTenancy.DbFinder
abp 多租户数据库查询组件,引用此模块将首先从分布式缓存查询当前租户配置
如果缓存不存在,则调用租户仓储接口获取租户数据,并存储到分布式缓存中
## 配置使用
模块按需引用
启动项目需要引用**Volo.Abp.TenantManagement.EntityFrameworkCore**
``` shell
// .NET CLI
dotnet add package Volo.Abp.TenantManagement.EntityFrameworkCore --version 3.0.0
// Package Manager
Install-Package Volo.Abp.TenantManagement.EntityFrameworkCore -Version 3.0.0
```
事先定义**appsettings.json**文件
```json
{
"ConnectionStrings": {
"AbpTenantManagement": "Server=127.0.0.1;Database=TenantDb;User Id=root;Password=yourPassword"
}
}
```
```csharp
[DependsOn(typeof(AbpDbFinderMultiTenancyModule))]
public class YouProjectModule : AbpModule
{
// other
}
# LINGYUN.Abp.MultiTenancy.DbFinder
abp 多租户数据库查询组件,引用此模块将首先从分布式缓存查询当前租户配置
如果缓存不存在,则调用租户仓储接口获取租户数据,并存储到分布式缓存中
## 配置使用
模块按需引用
启动项目需要引用**Volo.Abp.TenantManagement.EntityFrameworkCore**
``` shell
// .NET CLI
dotnet add package Volo.Abp.TenantManagement.EntityFrameworkCore
// Package Manager
Install-Package Volo.Abp.TenantManagement.EntityFrameworkCore
```
事先定义**appsettings.json**文件
```json
{
"ConnectionStrings": {
"AbpTenantManagement": "Server=127.0.0.1;Database=TenantDb;User Id=root;Password=yourPassword"
}
}
```
```csharp
[DependsOn(typeof(AbpDbFinderMultiTenancyModule))]
public class YouProjectModule : AbpModule
{
// other
}
```

1
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN.Abp.MultiTenancy.RemoteService.csproj

@ -12,6 +12,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj" />
</ItemGroup>

85
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantCreateEventHandler.cs

@ -1,40 +1,45 @@
using LINGYUN.Abp.TenantManagement;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantCreateEventHandler : IDistributedEventHandler<EntityCreatedEto<TenantEto>>, ITransientDependency
{
private readonly ITenantAppService _tenantAppService;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantCreateEventHandler(
ITenantAppService tenantAppService,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_tenantAppService = tenantAppService;
}
public virtual async Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData)
{
var tenantDto = await _tenantAppService.GetAsync(eventData.Entity.Id);
var tenantConnectionStringsDto = await _tenantAppService.GetConnectionStringAsync(eventData.Entity.Id);
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenantConnectionStringsDto.Items)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenantDto.Id, tenantDto.Name, connectionStrings);
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.SetAsync(cacheKey, cacheItem);
}
}
}
using LINGYUN.Abp.TenantManagement;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantCreateEventHandler : IDistributedEventHandler<EntityCreatedEto<TenantEto>>, ITransientDependency
{
private readonly ITenantAppService _tenantAppService;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantCreateEventHandler(
ITenantAppService tenantAppService,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_tenantAppService = tenantAppService;
}
public virtual async Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData)
{
var tenantDto = await _tenantAppService.GetAsync(eventData.Entity.Id);
var tenantConnectionStringsDto = await _tenantAppService.GetConnectionStringAsync(eventData.Entity.Id);
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenantConnectionStringsDto.Items)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenantDto.Id, tenantDto.Name, connectionStrings);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()),
cacheItem);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name),
cacheItem);
}
}
}

55
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantDeleteEventHandler.cs

@ -1,26 +1,29 @@
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantDeleteEventHandler : IDistributedEventHandler<EntityDeletedEto<TenantEto>>, ITransientDependency
{
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantDeleteEventHandler(
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
}
public virtual async Task HandleEventAsync(EntityDeletedEto<TenantEto> eventData)
{
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.RemoveAsync(cacheKey);
}
}
}
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantDeleteEventHandler : IDistributedEventHandler<EntityDeletedEto<TenantEto>>, ITransientDependency
{
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantDeleteEventHandler(
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
}
public virtual async Task HandleEventAsync(EntityDeletedEto<TenantEto> eventData)
{
await _cache.RemoveAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()));
await _cache.RemoveAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name));
}
}
}

85
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/LINGYUN/Abp/MultiTenancy/RemoteService/EventBus/Distributed/TenantUpdateEventHandler.cs

@ -1,40 +1,45 @@
using LINGYUN.Abp.TenantManagement;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantUpdateEventHandler : IDistributedEventHandler<EntityUpdatedEto<TenantEto>>, ITransientDependency
{
private readonly ITenantAppService _tenantAppService;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantUpdateEventHandler(
ITenantAppService tenantAppService,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_tenantAppService = tenantAppService;
}
public virtual async Task HandleEventAsync(EntityUpdatedEto<TenantEto> eventData)
{
var tenantDto = await _tenantAppService.GetAsync(eventData.Entity.Id);
var tenantConnectionStringsDto = await _tenantAppService.GetConnectionStringAsync(eventData.Entity.Id);
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenantConnectionStringsDto.Items)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenantDto.Id, tenantDto.Name, connectionStrings);
var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString());
await _cache.SetAsync(cacheKey, cacheItem);
}
}
}
using LINGYUN.Abp.TenantManagement;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.MultiTenancy.RemoteService.EventBus.Distributed
{
public class TenantUpdateEventHandler : IDistributedEventHandler<EntityUpdatedEto<TenantEto>>, ITransientDependency
{
private readonly ITenantAppService _tenantAppService;
private readonly IDistributedCache<TenantConfigurationCacheItem> _cache;
public TenantUpdateEventHandler(
ITenantAppService tenantAppService,
IDistributedCache<TenantConfigurationCacheItem> cache)
{
_cache = cache;
_tenantAppService = tenantAppService;
}
public virtual async Task HandleEventAsync(EntityUpdatedEto<TenantEto> eventData)
{
var tenantDto = await _tenantAppService.GetAsync(eventData.Entity.Id);
var tenantConnectionStringsDto = await _tenantAppService.GetConnectionStringAsync(eventData.Entity.Id);
var connectionStrings = new ConnectionStrings();
foreach (var tenantConnectionString in tenantConnectionStringsDto.Items)
{
connectionStrings[tenantConnectionString.Name] = tenantConnectionString.Value;
}
var cacheItem = new TenantConfigurationCacheItem(tenantDto.Id, tenantDto.Name, connectionStrings);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Id.ToString()),
cacheItem);
await _cache.SetAsync(
TenantConfigurationCacheItem.CalculateCacheKey(eventData.Entity.Name),
cacheItem);
}
}
}

114
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy.RemoteService/README.md

@ -1,58 +1,58 @@
# LINGYUN.Abp.MultiTenancy.RemoteService
abp 多租户远程服务组件,引用此模块将首先从分布式缓存查询当前租户配置
如果缓存不存在,则调用远程租户服务接口获取租户数据,并存储到分布式缓存中
## 配置使用
模块按需引用
如果远程服务接口定义了授权策略,需要配置接口客户端授权,并且启动项目需要引用**Volo.Abp.Http.Client.IdentityModel**模块
``` shell
// .NET CLI
dotnet add package Volo.Abp.Http.Client.IdentityModel --version 3.0.0
// Package Manager
Install-Package Volo.Abp.Http.Client.IdentityModel -Version 3.0.0
```
具体**RemoteServices**与**IdentityClients**配置请阅读abp文档
[RemoteServices配置参阅](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients)
[IdentityClients配置参阅](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs)
事先定义**appsettings.json**文件
```json
{
"RemoteServices": {
"TenantManagement": {
"BaseUrl": "http://localhost:30000/",
"IdentityClient": "tenant-finder-client"
}
},
"IdentityClients": {
"tenant-finder-client": {
"Authority": "http://localhost:44385",
"RequireHttps": false,
"GrantType": "client_credentials",
"ClientId": "tenant-finder-client",
"Scope": "tenant-service",
"ClientSecret": "1q2w3e*"
}
}
}
```
```csharp
[DependsOn(typeof(AbpRemoteServiceMultiTenancyModule))]
public class YouProjectModule : AbpModule
{
// other
}
# LINGYUN.Abp.MultiTenancy.RemoteService
abp 多租户远程服务组件,引用此模块将首先从分布式缓存查询当前租户配置
如果缓存不存在,则调用远程租户服务接口获取租户数据,并存储到分布式缓存中
## 配置使用
模块按需引用
如果远程服务接口定义了授权策略,需要配置接口客户端授权,并且启动项目需要引用**Volo.Abp.Http.Client.IdentityModel**模块
``` shell
// .NET CLI
dotnet add package Volo.Abp.Http.Client.IdentityModel
// Package Manager
Install-Package Volo.Abp.Http.Client.IdentityModel
```
具体**RemoteServices**与**IdentityClients**配置请阅读abp文档
[RemoteServices配置参阅](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients)
[IdentityClients配置参阅](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityClientConfiguration.cs)
事先定义**appsettings.json**文件
```json
{
"RemoteServices": {
"AbpTenantManagement": {
"BaseUrl": "http://localhost:30000/",
"IdentityClient": "InternalServiceClient"
}
},
"IdentityClients": {
"InternalServiceClient": {
"Authority": "http://localhost:44385",
"RequireHttps": false,
"GrantType": "client_credentials",
"ClientId": "tenant-finder-client",
"Scope": "tenant-service",
"ClientSecret": "1q2w3e*"
}
}
}
```
```csharp
[DependsOn(typeof(AbpRemoteServiceMultiTenancyModule))]
public class YouProjectModule : AbpModule
{
// other
}
```

13
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/CreateConnectionStringEventData.cs

@ -1,13 +0,0 @@
using System;
namespace LINGYUN.Abp.MultiTenancy
{
public class CreateConnectionStringEventData
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
}

11
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/DeleteConnectionStringEventData.cs

@ -1,11 +0,0 @@
using System;
namespace LINGYUN.Abp.MultiTenancy
{
public class DeleteConnectionStringEventData
{
public Guid Id { get; set; }
public string Name { get; set; }
}
}

9
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/DeleteEventData.cs

@ -1,9 +0,0 @@
using System;
namespace LINGYUN.Abp.MultiTenancy
{
public class DeleteEventData
{
public Guid Id { get; set; }
}
}

17
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/UpdateConnectionStringEventData.cs

@ -1,17 +0,0 @@
using System;
namespace LINGYUN.Abp.MultiTenancy
{
public class UpdateConnectionStringEventData
{
public Guid Id { get; set; }
public string OriginName { get; set; }
public string Name { get; set; }
public string OriginValue { get; set; }
public string Value { get; set; }
}
}

13
aspnet-core/modules/tenants/LINGYUN.Abp.MultiTenancy/LINGYUN/Abp/MultiTenancy/UpdateEventData.cs

@ -1,13 +0,0 @@
using System;
namespace LINGYUN.Abp.MultiTenancy
{
public class UpdateEventData
{
public Guid Id { get; set; }
public string OriginName { get; set; }
public string Name { get; set; }
}
}

361
aspnet-core/modules/tenants/LINGYUN.Abp.TenantManagement.Application/LINGYUN/Abp/TenantManagement/TenantAppService.cs

@ -1,184 +1,177 @@
using LINGYUN.Abp.MultiTenancy;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.ObjectExtending;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.TenantManagement
{
[Authorize(TenantManagementPermissions.Tenants.Default)]
public class TenantAppService : TenantManagementAppServiceBase, ITenantAppService
{
protected IDistributedEventBus EventBus { get; }
protected ITenantRepository TenantRepository { get; }
protected ITenantManager TenantManager { get; }
public TenantAppService(
ITenantRepository tenantRepository,
ITenantManager tenantManager,
IDistributedEventBus eventBus)
{
EventBus = eventBus;
TenantRepository = tenantRepository;
TenantManager = tenantManager;
}
public virtual async Task<TenantDto> GetAsync(Guid id)
{
var tenant = await TenantRepository.FindAsync(id, false);
if(tenant == null)
{
throw new UserFriendlyException(L["TenantNotFoundById", id]);
}
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
public virtual async Task<TenantDto> GetAsync(string name)
{
var tenant = await TenantRepository.FindByNameAsync(name, false);
if (tenant == null)
{
throw new UserFriendlyException(L["TenantNotFoundByName", name]);
}
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
public virtual async Task<PagedResultDto<TenantDto>> GetListAsync(TenantGetByPagedInputDto input)
{
var count = await TenantRepository.GetCountAsync(input.Filter);
var list = await TenantRepository.GetListAsync(
input.Sorting,
input.MaxResultCount,
input.SkipCount,
input.Filter
);
return new PagedResultDto<TenantDto>(
count,
ObjectMapper.Map<List<Tenant>, List<TenantDto>>(list)
);
}
[Authorize(TenantManagementPermissions.Tenants.Create)]
public virtual async Task<TenantDto> CreateAsync(TenantCreateDto input)
{
var tenant = await TenantManager.CreateAsync(input.Name);
input.MapExtraPropertiesTo(tenant);
await TenantRepository.InsertAsync(tenant);
await CurrentUnitOfWork.SaveChangesAsync();
var createEventData = new CreateEventData
{
Id = tenant.Id,
Name = tenant.Name,
AdminUserId = GuidGenerator.Create(),
AdminEmailAddress = input.AdminEmailAddress,
AdminPassword = input.AdminPassword
};
// 因为项目各自独立,租户增加时添加管理用户必须通过事件总线
// 而 TenantEto 对象没有包含所需的用户名密码,需要独立发布事件
await EventBus.PublishAsync(createEventData);
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.Update)]
public virtual async Task<TenantDto> UpdateAsync(Guid id, TenantUpdateDto input)
{
var tenant = await TenantRepository.GetAsync(id, false);
var updateEventData = new UpdateEventData
{
Id = tenant.Id,
OriginName = tenant.Name,
Name = input.Name
};
await TenantManager.ChangeNameAsync(tenant, input.Name);
input.MapExtraPropertiesTo(tenant);
await TenantRepository.UpdateAsync(tenant);
await EventBus.PublishAsync(updateEventData);
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
var tenant = await TenantRepository.FindAsync(id);
if (tenant == null)
{
return;
}
await TenantRepository.DeleteAsync(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<TenantConnectionStringDto> GetConnectionStringAsync(Guid id, string name)
{
var tenant = await TenantRepository.GetAsync(id);
var tenantConnectionString = tenant.FindConnectionString(name);
return new TenantConnectionStringDto
{
Name = name,
Value = tenantConnectionString
};
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<ListResultDto<TenantConnectionStringDto>> GetConnectionStringAsync(Guid id)
{
var tenant = await TenantRepository.GetAsync(id);
return new ListResultDto<TenantConnectionStringDto>(
ObjectMapper.Map<List<TenantConnectionString>, List<TenantConnectionStringDto>>(tenant.ConnectionStrings));
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<TenantConnectionStringDto> SetConnectionStringAsync(Guid id, TenantConnectionStringCreateOrUpdateDto tenantConnectionStringCreateOrUpdate)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.SetConnectionString(tenantConnectionStringCreateOrUpdate.Name, tenantConnectionStringCreateOrUpdate.Value);
var updateEventData = new UpdateEventData
{
Id = tenant.Id,
OriginName = tenant.Name,
Name = tenant.Name
};
// abp当前版本(3.0.0)在EntityChangeEventHelper中存在一个问题,无法发送框架默认的Eto,预计3.1.0修复
// 发送自定义的事件数据来确保缓存被更新
await EventBus.PublishAsync(updateEventData);
return new TenantConnectionStringDto
{
Name = tenantConnectionStringCreateOrUpdate.Name,
Value = tenantConnectionStringCreateOrUpdate.Value
};
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task DeleteConnectionStringAsync(Guid id, string name)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.RemoveConnectionString(name);
var updateEventData = new UpdateEventData
{
Id = tenant.Id,
OriginName = tenant.Name,
Name = tenant.Name
};
await EventBus.PublishAsync(updateEventData);
await TenantRepository.UpdateAsync(tenant);
}
}
}
using LINGYUN.Abp.MultiTenancy;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.ObjectExtending;
using Volo.Abp.TenantManagement;
namespace LINGYUN.Abp.TenantManagement
{
[Authorize(TenantManagementPermissions.Tenants.Default)]
public class TenantAppService : TenantManagementAppServiceBase, ITenantAppService
{
protected IDistributedEventBus EventBus { get; }
protected ITenantRepository TenantRepository { get; }
protected ITenantManager TenantManager { get; }
public TenantAppService(
ITenantRepository tenantRepository,
ITenantManager tenantManager,
IDistributedEventBus eventBus)
{
EventBus = eventBus;
TenantRepository = tenantRepository;
TenantManager = tenantManager;
}
public virtual async Task<TenantDto> GetAsync(Guid id)
{
var tenant = await TenantRepository.FindAsync(id, false);
if(tenant == null)
{
throw new UserFriendlyException(L["TenantNotFoundById", id]);
}
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
public virtual async Task<TenantDto> GetAsync(string name)
{
var tenant = await TenantRepository.FindByNameAsync(name, false);
if (tenant == null)
{
throw new UserFriendlyException(L["TenantNotFoundByName", name]);
}
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
public virtual async Task<PagedResultDto<TenantDto>> GetListAsync(TenantGetByPagedInputDto input)
{
var count = await TenantRepository.GetCountAsync(input.Filter);
var list = await TenantRepository.GetListAsync(
input.Sorting,
input.MaxResultCount,
input.SkipCount,
input.Filter
);
return new PagedResultDto<TenantDto>(
count,
ObjectMapper.Map<List<Tenant>, List<TenantDto>>(list)
);
}
[Authorize(TenantManagementPermissions.Tenants.Create)]
public virtual async Task<TenantDto> CreateAsync(TenantCreateDto input)
{
var tenant = await TenantManager.CreateAsync(input.Name);
input.MapExtraPropertiesTo(tenant);
await TenantRepository.InsertAsync(tenant);
await CurrentUnitOfWork.SaveChangesAsync();
var createEventData = new CreateEventData
{
Id = tenant.Id,
Name = tenant.Name,
AdminUserId = GuidGenerator.Create(),
AdminEmailAddress = input.AdminEmailAddress,
AdminPassword = input.AdminPassword
};
// 因为项目各自独立,租户增加时添加管理用户必须通过事件总线
// 而 TenantEto 对象没有包含所需的用户名密码,需要独立发布事件
await EventBus.PublishAsync(createEventData);
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.Update)]
public virtual async Task<TenantDto> UpdateAsync(Guid id, TenantUpdateDto input)
{
var tenant = await TenantRepository.GetAsync(id, false);
await TenantManager.ChangeNameAsync(tenant, input.Name);
input.MapExtraPropertiesTo(tenant);
await TenantRepository.UpdateAsync(tenant);
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
var tenant = await TenantRepository.FindAsync(id);
if (tenant == null)
{
return;
}
await TenantRepository.DeleteAsync(tenant);
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<TenantConnectionStringDto> GetConnectionStringAsync(Guid id, string name)
{
var tenant = await TenantRepository.GetAsync(id);
var tenantConnectionString = tenant.FindConnectionString(name);
return new TenantConnectionStringDto
{
Name = name,
Value = tenantConnectionString
};
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<ListResultDto<TenantConnectionStringDto>> GetConnectionStringAsync(Guid id)
{
var tenant = await TenantRepository.GetAsync(id);
return new ListResultDto<TenantConnectionStringDto>(
ObjectMapper.Map<List<TenantConnectionString>, List<TenantConnectionStringDto>>(tenant.ConnectionStrings));
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task<TenantConnectionStringDto> SetConnectionStringAsync(Guid id, TenantConnectionStringCreateOrUpdateDto tenantConnectionStringCreateOrUpdate)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.SetConnectionString(tenantConnectionStringCreateOrUpdate.Name, tenantConnectionStringCreateOrUpdate.Value);
var eventData = new ConnectionStringChangedEventData
{
Id = tenant.Id,
OriginName = tenantConnectionStringCreateOrUpdate.Name,
Name = tenantConnectionStringCreateOrUpdate.Name
};
await EventBus.PublishAsync(eventData);
return new TenantConnectionStringDto
{
Name = tenantConnectionStringCreateOrUpdate.Name,
Value = tenantConnectionStringCreateOrUpdate.Value
};
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public virtual async Task DeleteConnectionStringAsync(Guid id, string name)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.RemoveConnectionString(name);
var eventData = new ConnectionStringChangedEventData
{
Id = tenant.Id,
OriginName = name,
Name = name
};
await EventBus.PublishAsync(eventData);
await TenantRepository.UpdateAsync(tenant);
}
}
}

42
aspnet-core/modules/tenants/LINGYUN.Abp.TenantManagement.HttpApi.Client/LINGYUN/Abp/TenantManagement/AbpTenantManagementHttpApiClientModule.cs

@ -1,22 +1,20 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.TenantManagement
{
[DependsOn(
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpHttpClientModule))]
public class AbpTenantManagementHttpApiClientModule : AbpModule
{
public const string RemoteServiceName = "TenantManagement";
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(
typeof(AbpTenantManagementApplicationContractsModule).Assembly,
RemoteServiceName
);
}
}
}
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.TenantManagement
{
[DependsOn(
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpHttpClientModule))]
public class AbpTenantManagementHttpApiClientModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(
typeof(AbpTenantManagementApplicationContractsModule).Assembly,
TenantManagementRemoteServiceConsts.RemoteServiceName
);
}
}
}

Loading…
Cancel
Save