单层解决方案:多租户架构
多租户是一种软件架构模式,其中单个软件实例(代码库)在服务器上运行,同时为多个租户提供服务。各租户之间相互隔离,可拥有独立的数据、配置和用户。本文档将阐述单层解决方案模板中的多租户运行机制。您可通过阅读多租户架构、租户管理模块与软件即服务模块 *文档深入了解该功能。
单层解决方案中的多租户实现
单层解决方案模板仅在创建时勾选*启用多租户功能 ******选项后才会采用多租户架构。
您可以为每个租户配置独立数据库,也可让部分租户共享数据库。在*软件即服务模块 *****中,可通过连接字符串管理界面指定数据库连接字符串。所有缓存数据均按租户隔离存储,每个事件、后台任务及其他数据都会附带租户标识进行存储。
在应用程序中可通过ICurrentTenant服务获取当前租户信息:
public class MyService : ITransientDependency
{
private readonly ICurrentTenant _currentTenant;
public MyService(ICurrentTenant currentTenant)
{
_currentTenant = currentTenant;
}
public void MyMethod()
{
var tenantId = _currentTenant.Id;
var tenantName = _currentTenant.Name;
}
}
此外,您还可以利用数据过滤器系统临时禁用租户过滤器,以查询同一数据库中的所有数据:
public class MyBookService : ITransientDependency
{
private readonly IDataFilter<IMultiTenant> _multiTenantFilter;
private readonly IRepository<Book, Guid> _bookRepository;
public MyBookService(
IDataFilter<IMultiTenant> multiTenantFilter,
IRepository<Book, Guid> bookRepository)
{
_multiTenantFilter = multiTenantFilter;
_bookRepository = bookRepository;
}
public async Task<List<Book>> GetAllBooksIncludingDeletedAsync()
{
//临时禁用IMultiTenant过滤器
using (_multiTenantFilter.Disable())
{
return await _bookRepository.GetListAsync();
}
}
}
抠丁客



