autofac - Autofac多租户不解析每个租户的类型
问题描述
我有一个使用 Autofac.Multitenant 3.1.1 的 ASP.NET MVC/WebApi2 应用程序。我已经设置了一个 TenantIdentificationStrategy 来识别租户。我还将一个类型注册为 InstancePerTenant。我有每个客户的租户 ID 和不存在上下文的后台作业的特殊 ID TenantIdentificationStrategy 被正确调用并从上下文中找到 id,但 InstancePerTenant 在启动时仅实例化两次:一次用于默认生命周期范围(租户为空),第一个租户一次。如果我注销并与另一个租户一起登录,则重复使用相同的类型而不是新的类型。我可以在容器中看到,每个租户 ID 创建了一个租户生命周期范围,但不是 4 个独立的 InstancePerTenant 类型。我的租户 ID 代码是:
public class TenantIdentificationStrategy : ITenantIdentificationStrategy
{
public bool TryIdentifyTenant(out object tenantId)
{
tenantId = null;
try
{
var context = HttpContext.Current;
if (context == null)
{
tenantId = "jobservice";
}
else
{
if (context.User?.Identity != null && context.User.Identity.IsAuthenticated)
{
var claims = context.User as ClaimsPrincipal;
tenantId = claims.FindAll(c => c.Type == "cID").FirstOrDefault()?.Value;
}
}
}
catch (HttpException)
{
// Happens at app startup in IIS 7.0
}
return tenantId != null;
}
}
在 Startup.cs - Configuration() 我有(片段):
var builder = new ContainerBuilder();
builder.RegisterAssemblyModules(AppDomain.CurrentDomain.GetAssemblies());
var container = builder.Build();
var tenantIdentifier = new TenantIdentificationStrategy();
mtContainer = new MultitenantContainer(tenantIdentifier, container);
以及单独程序集中的注册模块:
public class RegistrationModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
......
builder.RegisterType<Office365ClientService>().As<IOffice365ClientService>().InstancePerDependency();
builder.RegisterType<Office365Service>().As<IOffice365Service>().InstancePerDependency();
builder.RegisterType<Office365ClientHttpProvider>().As<IHttpProvider>().InstancePerTenant();
......
}
}
Office365ClientService 依赖于 IHttpProvider
我错过了什么?
解决方案
推荐阅读
- python - 如何在每个单词之后拆分并以有组织的方式获取以下字符串?
- excel - 转置唯一 ID 时在输出中获取额外的列
- flutter - ListView 构建器装饰中的 Flutter Material()
- react-native - 标题屏幕的标题没有改变“react-native 抽屉博览会”
- python - KeyError:0,多输出模型中的 TFF 奇怪错误
- android - 折线图片段 | 科特林
- php - 如何在 CakePHP 4.2 中将变量传递给 $callback Collection::map($callback)?
- r - 如何获取df中所有分类变量的频率和百分比
- javascript - 在 javascript 类声明中,在构造函数和主体中声明方法有什么区别?
- javascript - 将 Vue2 CLI 转换为 Vite