1. 新增 ITenantCodeResolver 接口和 DatabaseTenantCodeResolver 实现 2. 修改 TenantResolutionMiddleware 支持从数据库动态解析租户编码 3. ITenantRepository 新增 FindIdByCodeAsync 方法 4. 移除 EfMenuRepository 中危险的系统菜单回退逻辑 5. 调整服务注册顺序确保依赖正确注入 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
36 lines
1.3 KiB
C#
36 lines
1.3 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
using TakeoutSaaS.Shared.Abstractions.Tenancy;
|
|
|
|
namespace TakeoutSaaS.Module.Tenancy.Extensions;
|
|
|
|
/// <summary>
|
|
/// 多租户服务注册及中间件扩展。
|
|
/// </summary>
|
|
public static class TenantServiceCollectionExtensions
|
|
{
|
|
/// <summary>
|
|
/// 注册租户上下文、解析中间件及默认租户提供者。
|
|
/// </summary>
|
|
public static IServiceCollection AddTenantResolution(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
services.TryAddSingleton<ITenantContextAccessor, TenantContextAccessor>();
|
|
services.TryAddScoped<ITenantProvider, TenantProvider>();
|
|
services.TryAddScoped<ITenantCodeResolver, DatabaseTenantCodeResolver>();
|
|
|
|
services.AddOptions<TenantResolutionOptions>()
|
|
.Bind(configuration.GetSection("Tenancy"))
|
|
.ValidateDataAnnotations();
|
|
|
|
return services;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 使用多租户解析中间件。
|
|
/// </summary>
|
|
public static IApplicationBuilder UseTenantResolution(this IApplicationBuilder app)
|
|
=> app.UseMiddleware<TenantResolutionMiddleware>();
|
|
}
|