我正在. NET中开发一个多租户应用程序,遇到了一个问题,我需要从定制中间件TenantMiddleware中访问一个作用域服务ITenantProvider.但是,当我try 运行我的应用程序时,我收到以下错误:
无法从根目录解析作用域服务'MyNameSpace. ITenantProvider' Provider
以下是中间件:
public class TenantMiddleware
{
private readonly RequestDelegate _next;
private readonly ITenantProvider _tenantProvider;
public TenantMiddleware(ITenantProvider tenantProvider, RequestDelegate next)
{
_tenantProvider = tenantProvider;
_next = next;
}
public async Task Invoke(HttpContext context)
{
// Logic to set tenant ID
await _next(context);
}
}
启动配置:
services.AddScoped<ITenantProvider, TenantProviderImplementation>();
builder.Services.AddTransient<IDBService, DBService>();
app.UseMiddleware<TenantMiddleware>();
租户ITenantProvider的目标是设置一个租户ID(作为作用域),并在将其作为作用域注入到临时数据库服务时由其他服务使用.
public interface ITenantProvider
{
public Guid GetTenantId();
public void SetTenantId(Guid tenantId);
}
DBService将tenantId提供程序作为依赖项:
DbService(ITenantProvider tenant) { ... }
最重要的是方法DbLogic将能够经由方法GetTenantId()
从注入的ITenantProvider
获得与一次性调用的方法SetTenantId(Guid tenantId)
相对应的tenantId,
DbLogic()
{
Guid tenantId = _tenantProvider.GetTenantId();
}
我知道这个问题与试图将作用域服务(ITenantProvider
)注入单例中间件有关,但我不确定如何正确地构造它以避免错误.